Ниже тот же код
<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 = "module-xxxx" @AshishKamble
хорошо, тогда используйте By.XPath ("* // div [начинается с (@ id, 'module')]")
@Ajit Вместо предоставления HTML-кода индивидуальные обновите вопрос, добавив в вопрос актуальный соответствующий HTML-код на основе текста для дальнейшего анализа.




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