С чего начинается вебдрайвер, ищущий элементы с помощью xpath - PullRequest
1 голос
/ 11 мая 2019

В настоящее время я тестирую веб-сайт с Selenium / Webdriver, который отображает имена и адреса людей в нескольких полях.Например, каждое поле содержит поле «Имя».Все эти поля имеют сгенерированные идентификаторы, поэтому я не могу их использовать.

Мой подход - сначала найти поле, а затем элемент, который я ищу.Я использую выражения xPath, как это, немного сложнее, но для вопроса проще так:

WebElement box3 = driver.findElement(By.xpath("//div[contains(@boxnum,'3')]");
WebElement firstName = box3.findElement(By.xpath(".//div[contains(@field,'firstname')]/input");

То, что существуют абсолютные и относительные выражения xPath, мне тоже известно, но, видимо, я не оченьпонял это еще.Если я опущу начальную точку для поиска элемента fistName в xPath, будет найдено поле имени из первого поля.Однако я предположил, что мне это не понадобится, так как я начал поиск с «box3».К сожалению, я не нашел документ, который объясняет мне это таким образом, что я понимаю это.Я надеюсь, что здесь есть кто-то, кто может это объяснить.

1 Ответ

2 голосов
/ 12 мая 2019

Не совсем.

С учетом следующего кода, сопоставленного со страницей https://www.seleniumeasy.com/test/bootstrap-dual-list-box-demo.html, которая выглядит следующим образом:

enter image description here

driver.get("https://www.seleniumeasy.com/test/bootstrap-dual-list-box-demo.html");
WebElement listGroup = driver.findElement(By.xpath("//ul[@class='list-group']"));
List<WebElement> entries = listGroup.findElements(By.xpath("//li[@class='list-group-item']"));
entries.forEach(entry -> System.out.println(entry.getText()));

Вы получите следующий вывод:

bootstrap-duallist
Dapibus ac facilisis in
Morbi leo risus
Porta ac consectetur ac
Vestibulum at eros
Cras justo odio
Dapibus ac facilisis in
Morbi leo risus
Porta ac consectetur ac
Vestibulum at eros

поскольку Selenium оценивает XPath из корня документа

И если вы измените код как:

driver.get("https://www.seleniumeasy.com/test/bootstrap-dual-list-box-demo.html");
WebElement listGroup = driver.findElement(By.xpath("//ul[@class='list-group']"));
List<WebElement> entries = listGroup.findElements(By.xpath(".//li[@class='list-group-item']"));
entries.forEach(entry -> System.out.println(entry.getText()));

вы получите значения только из первого столбца.

bootstrap-duallist
Dapibus ac facilisis in
Morbi leo risus
Porta ac consectetur ac
Vestibulum at eros

как и во втором случае, выражение XPath применяется к текущему узлу * только 1025 *

Оформить Выбор узлов глава:

enter image description here

Ссылки

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