невозможно найти элемент с динамическим идентификатором - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю несколько тестов с Selenium для проекта, для которого я работаю.По какой-то причине я не могу найти элемент с его идентификатором, классом, xpath и т. Д. Возможно, я делаю что-то не так.После того как я войду в приложение, страница будет выглядеть следующим образом:

После того, как я войду в систему

Если вы увидите 3 вкладки: Избранное, Мой проект, Все проекты, которые у них естьИдентификаторы 12, 13, 14 соответственно.Когда я нажимаю кнопку «Добавить проект» и нажимаю «Создать», добавляется новый проект и этот проект в разделе «Мои проекты».Поэтому после создания этого проекта я хочу нажать на кнопку «Мои проекты», а затем нажать на название нового проекта и отредактировать его, чтобы я мог внести некоторые изменения и продолжить свой тест.Проблема в том, что, когда я пытаюсь нажать на кнопку «Мои проекты», я не могу, и он говорит, что это свойство нельзя щелкнуть.После добавления нового проекта идентификаторы трех вышеупомянутых кнопок также меняются.Таким образом, «Избранное» теперь имеет Id = 15, «Мои проекты» - Id = 16, а «Все проекты» - Id = 17.Может кто-нибудь помочь и дать мне знать, как правильно найти такой элемент?Я пробовал разные вещи, но пока ничего не работает.Ниже приведен код в моем тесте и скриншот с проверкой элемента.Заранее спасибо, любая помощь будет высоко ценится.

        driver.FindElement(By.Id("UserName")).Click();
        driver.FindElement(By.Id("UserName")).Clear();
        driver.FindElement(By.Id("UserName")).SendKeys("admin");
        driver.FindElement(By.XPath("(.//*[normalize-space(text()) and normalize-space(.)='Login'])[3]/following::table[1]")).Click();
        driver.FindElement(By.Id("Password")).Click();
        driver.FindElement(By.Id("Password")).Clear();
        driver.FindElement(By.Id("Password")).SendKeys("admin");
        driver.FindElement(By.XPath("(.//*[normalize-space(text()) and normalize-space(.)='Password'])[1]/following::input[2]")).Click();
        driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
        driver.FindElement(By.Id("addproject-button")).Click();
        driver.FindElement(By.Id("Name")).Click();
        driver.FindElement(By.Id("Name")).Clear();
        driver.FindElement(By.Id("Name")).SendKeys("ProjectX");
        driver.FindElement(By.Id("Comments")).Click();
        driver.FindElement(By.Id("Comments")).Clear();
        driver.FindElement(By.Id("Comments")).SendKeys("the project");
        driver.FindElement(By.Id("addproject")).Click();
        driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
        //****************** THIS IS WHERE MY TEST FAILS-IT CAN'T LOCATE THE ELEMENT BY.ID*****************
          driver.FindElement(By.XPath("//li[@class='ui-state-default ui-corner-top']/a[contains(.,'My projects')]")).Click();
        //driver.FindElement(By.Id("ui-id-16")).Click();
        //driver.FindElement(By.CssSelector("a.ui-tabs-anchor[id='ui-id-16']")).Click();

//driver.FindElement(By.Id("ProjectListTable")).FindElement(By.Id("project-list-tabs-content")).Click();//FindElement(By.ClassName("ui-state-default.ui-corner-top.ui-tabs-active.ui-state-active")).Click();
        //driver.FindElement(By.ClassName("ui-tabs-anchor")).Click();

Кнопка моего проекта после создания проекта

1 Ответ

0 голосов
/ 18 февраля 2019

Я бы порекомендовал использовать два

IList<IWebElement>

Один с именами проектов, второй с элементами, по которым можно щелкнуть.Затем вы можете перебрать первый список, чтобы получить номер строки, где нужен проект.Затем нажмите на этот проект, используя второй список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...