Как найти предмет в Selenium WebDriver? - PullRequest
0 голосов
/ 04 мая 2018

Я хочу найти следующий предмет, используя Selenium. Значение класса изменяется всякий раз, когда происходит изменение. Это внутри сложной страницы (несколько фреймов и другие элементы, загружаемые динамически). Единственный уникальный идентификатор - itemid, который является динамическим значением и комбинацией title. Если я нажму на это действие, я получу еще один новый набор сложных предметов. Я новичок в Selenium. Как это сделать?

HTML:

<td itemid="xxyyy.as123" title="Actions" nowrap="" class="text-button">Actions&nbsp;<img src="../row.gif"></td>

<td itemid="xxyyy.as123" title="Actions" nowrap="" class="text-button button-active">Actions&nbsp;<img src="../row.gif"></td>

<td itemid="xxyyy.as123" title="Actions" nowrap="" class="text-button button-hover">Actions&nbsp;<img src="../row.gif"></td>

Код, который я пробовал:

  1. Найти по Xpath

    var element=driver.FindElement(By.XPath("html/body/div[id='pageContent']/iframe/#document/ht‌ml/frameset/frame[name='detailsDisplay']/#document/html/body/form[name='tableForm‌']/div[id='divToolbarContainer']/div[id='divToolbar']/div[1][class='toolbar']/tab‌​le/tbody/tr/td[title='Actions']"));
    
  2. Поиск по тексту ссылки

    var element = driver.FindElement(By.LinkText("Actions"));
    

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Создать динамический селектор CSS.

Например:

driver.FindElement(By.CssSelector("td[itemid$="xxyyy."]")).Click(); 

Примечание: в динамических элементах всегда есть часть локатора, которая является фиксированной. нам нужно сгенерировать локатор, используя эту часть.

  1. Если при запуске установлена ​​фиксированная деталь - используйте символ моркови (^)
  2. Если фиксированная деталь находится посередине - используйте знак звездочки (*)
  3. Если фиксированная деталь находится в конце - используйте знак Доллера ($)
0 голосов
/ 04 мая 2018

Наконец я смог достичь этого, используя имена фреймов.

 driver.SwitchTo().Frame("content").SwitchTo().Frame("detailsDisplay");                        
 var element = driver.FindElement(By.XPath("//*[@id=\"divToolbar\"]/div[1]/table/tbody/tr/td[1]"));

Спасибо всем.

0 голосов
/ 04 мая 2018
*

Попробуйте * 1001

 By.CssSelector("td[title="Actions"]");
 By.CssSelector("td[itemid="xxyyy.as123"]");
 By.CssSelector("td[itemid="xxyyy.as123"][title="Actions"]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...