Захват элементов внутри класса div

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

<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-renderertype все вместе, например выше имеет "только изображения" и может быть в любом произвольном порядке. Чего я действительно хочу добиться, так это извлечь все значения data-renderertype из всех 8 (это не постоянное число, так как оно может варьироваться в зависимости от страницы) разных классов div, чтобы его можно было сохранить и использовать для сравнения с другая версия сайта. Я надеюсь, что это имеет смысл, любая помощь будет очень признательна, так как сейчас я подавлен и не уверен, с чего начать.

всегда ли id начинается с имени модуля, т.е. id = "module ......"

Ashish Kamble 21.11.2018 11:05

Да, они всегда id = "module-xxxx" @AshishKamble

Ajit 21.11.2018 11:22

хорошо, тогда используйте By.XPath ("* // div [начинается с (@ id, 'module')]")

Ashish Kamble 21.11.2018 12:00

@Ajit Вместо предоставления HTML-кода индивидуальные обновите вопрос, добавив в вопрос актуальный соответствующий HTML-код на основе текста для дальнейшего анализа.

DebanjanB 21.11.2018 14:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
143
4

Ответы 4

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

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");
}

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

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

for( WebElement elem : allRows ){

   System.out.println("Value=== " + elem.getAttribute("data-renderertype"));
}

Это то, что я получил Значение === значение null === значение null === значение null === значение null === значение null === значение null === null

Ajit 21.11.2018 11:45

Не могли бы вы попробовать тот же код, просто замените data-renderertype на id и поделитесь результатом

Kushal Bhalaik 21.11.2018 12:22

Что бы я сделал:

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

Другие вопросы по теме