Захват элементов внутри класса div - PullRequest
0 голосов
/ 21 ноября 2018

Ниже тот же код

<section id=“zone_body” class =“zone zone_body>

<div class =“row”>…<div>

<div data-o_id="4915279" data-renderertype="imagesonly" class="module module-carousel module-carousel--imagesonly col col--1-1" id="module-2319657">

::after

</div>

<div class =“row”>…<div>

<div class =“row”>…<div>

<div class =“row”>…<div>

<div class =“row”>…<div>

<div class =“row”>…<div>

<div class =“row”>…<div>

<div class =“row”>…<div>


</section>

Я тестирую веб-страницу, которую пытаюсь автоматизировать с помощью селена с Java.Согласно HTML-коду выше каждой страницы, которую я тестирую, этот стандарт имеет 16 различных типов data-renderertype, а согласно коду выше 8 различных классов div внутри тела могут иметь одинаковый или другой тип data-renderer type все вместе, напримервыше имеет «imagesonly» и может быть в любом случайном порядке.Чего я действительно хочу добиться, так это извлечь все значения data-renderertype из всех 8 (это не постоянное число, так как оно может варьироваться в зависимости от страницы) из различных классов div, чтобы их можно было сохранить и использовать для сравнения сдругая версия сайта.Я надеюсь, что это имеет смысл, любая помощь будет очень признательна, так как я сейчас поражен и не знаю, с чего начать.

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018
List<WebElement> elements = driver.findElements(by.xpath("//section[@id='zone_body']//div[@class='row']"));
for(int i=0;i<elements.size();i++) {
    System.out.println( elements.get(i).getAttribute("data-renderertype"));
}

Этот фрагмент получает все элементы <div class='row'/> с тегом <section id='zone_body' /> в список элементов, повторяя список с циклом for для получения значения атрибута data-renderertype.

0 голосов
/ 21 ноября 2018

Попробуйте это:

List<WebElement> allRows = driver.findElements(By.cssSelector("#zone_body > div.row"));

for( WebElement elem : allRows ){

   System.out.println("Value=== " + elem.getAttribute("data-renderertype"));
}
0 голосов
/ 21 ноября 2018

Я бы сделал следующее:

  1. Получите предмет, используя List<WebElement> divs = driver.findElements(By.xpath("#zone_body .row")) (обратите внимание, что ваш XPath нужно выбирать тщательно, чтобы обеспечить стабильность и удобство обслуживания сценария Selenium)
  2. Пролистайте список и используйте WebElement.getAttribute("data-renderertype") для каждого элемента, заполняя новый список или карту или любой другой тип данных, который вам нужен.
0 голосов
/ 21 ноября 2018

вы можете сделать логику вот так:

List<IWebElement> elements= driver.findElements(By.XPath("*//div[data-renderertype]"));

или

List<IWebElement> elements= driver.findElements(By.XPath("*[data-renderertype]"));

или

List<IWebElement> elements = driver.findElements(By.XPath("*//div[starts-with(@id,'module')]"));
forEach(IWebElement ein elements){
    string str = e.getAttribute("data-renderertype");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...