Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Поиск дочернего элемента от текущего. Есть ли способы?

selenium
webdriver
java
Теги: #<Tag:0x00007f7b61b3f6a8> #<Tag:0x00007f7b61b3f310> #<Tag:0x00007f7b61b3f158>

(Kosmos) #1

Добрый день.

Можно ли искать элементы в зависимости от текущего элемента?
Например,
`< table id=“tbl”>

demo `

WebElement element = driver.findElement(By.id("tbl")); element.findElement(By.Xpath("tr/td")).getText();


К вопросу о том, с какого языка программирования начинать тестировщику
(Keiga) #2

Можно. Xpath относительно текущего элемента начинается с точки .

Например ./ или .//


(The Serjiom ) #3

Дополню еще https://www.w3.org/TR/xpath/#path-abbrev


(Jamie Berry) #4

http://zvon.org/xxl/XPathTutorial/General_rus/examples.html

Пример #11


(The Serjiom ) #5

Используя Selenide:
=Search for parents/children=
$(“td”).parent()
$(“td”).closest(“tr”)
$(“.btn”).closest(“.modal”)
$(“div”).find(By.name(“q”))


(Kosmos) #6

Не совсем то…
Поиск элемента внутри синтаксиса Selenium. Т.е. element в моем примере - уже Java-объект, содержащий в себе объект DOM. Т.о. поиск идет относительно уже найденного объекта.


(Bolatbek) #7

Ответ можно.
Должна работать такая конструкция:

WebElement element = driver.findElement(By.id("tbl"));
element.findElement(By.Xpath("./tr/td")).getText();

(Kosmos) #8

@Mes, спасибо!

В итоге код для поиска элемента от полученного элемента вышел таким:

int cnt = 1;

List<WebElement> elements = driver.findElements(By.xpath(".//div[@class='g']"));
        System.out.printf("Total element on page: %d%n", elements.size());
        for (WebElement e : elements) {
            try {
                System.out.println(cnt + ": " + e.findElement(By.xpath("./div[@class='rc']/h3/a")).getText());
            } catch (NoSuchElementException error){
                System.out.println(cnt + ": " + "Error!!! Element not found!!!! " + error.getMessage());
            }
            cnt++;
        }