Как считать IMG-теги в DIV с помощью Xpath - PullRequest
0 голосов
/ 15 февраля 2020

Я хочу посчитать, сколько IMG-тегов есть под тегом div поверхности, и отобразить сумму.

<div id="surface" style="width: 4567px; height: 4137px; left: -1850px; top: -1152px; cursor: default;">


<img src="https://media.memories.png" data-seat="L:106|EE:5" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2221px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-seat="L:106|EE:6" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2237px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-seat="L:106|EE:7" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2253px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-seat="L:106|EE:8" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2269px; top: 1561px; display: block;">


</div>

Вот моя неработающая попытка получить счет, однако он не возвращает счетчик для запуска. мой тест в селен IDE.

"//div[@surface='data-seat']/img"

Ответы [ 4 ]

0 голосов
/ 17 февраля 2020

Чтобы напечатать теги count из <img> внутри тега <div>, вам нужно вызвать WebDriverWait для visibilityOfAllElementsLocatedBy(), и вы можете использовать любой из следующих Стратегии локатора :

  • xpath:

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@id='surface']//img"))).size());
    
  • cssSelector:

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div#surface img"))).size());
    
0 голосов
/ 15 февраля 2020

Вариант 1: Вы можете просто использовать приведенный ниже xpath и затем получить счет.

xpath to Image - "// div [@ id = ' surface '] / img "

System.out.println(driver.findElements(By.xpath("//div[@id='surface']/img")).size());

Вариант 2: Если вы хотите сделать его более сложным, используйте js для запуска запроса и возврата количество.

JavascriptExecutor js = (JavascriptExecutor) driver;
Long number_of_imgs = (Long) js.executeScript("return document.querySelectorAll(\"div[id='surface'] img\").length");
System.out.println(number_of_imgs);

Я бы предпочел вариант 1.

0 голосов
/ 16 февраля 2020

Вы можете использовать выражение XPath-1.0

count(//div[@id='surface']/img)

. Он подсчитывает все img дочерние элементы всех div элементов.

0 голосов
/ 15 февраля 2020

Попробуйте:

//div[@surface='data-seat']/count(img)

Для вашего примера html выводит 4.

...