Java 捕获div类中的元素

Java 捕获div类中的元素,java,arrays,selenium,selenium-webdriver,webdriver,Java,Arrays,Selenium,Selenium Webdriver,Webdriver,下面是相同的代码 <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-231965

下面是相同的代码

<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>

…
::之后
…
…
…
…
…
…
…

我正在测试一个web页面,我正试图使用selenium和Java实现该页面的自动化。根据上面的html代码,我正在测试的每个页面都有这个标准16种不同类型的数据呈现器类型,根据上面的代码,体内8个不同的div类可以有相同或不同的数据呈现器类型,例如上面的“imagesonly”可以是任意顺序。我真正想要实现的是从所有8个不同的div类中提取所有数据renderType值(这不是一个常数,因为它可以根据页面的不同而变化),这样就可以存储它并用于将其与站点的不同版本进行比较。我希望这是有意义的,任何帮助都将非常感谢,因为我现在不知所措,不知道从哪里开始。

你可以这样理解逻辑

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

List elements=driver.findElements(By.XPath(“*[data RenderType]”);

List elements=driver.findElements(By.XPath(“*//div[以(@id,'module')]开头]);
forEach(IWebElement元素){
string str=e.getAttribute(“数据呈现器类型”);
}
试试这个:

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

for( WebElement elem : allRows ){

   System.out.println("Value=== " + elem.getAttribute("data-renderertype"));
}
List allRows=driver.findElements(By.cssSelector(“#zone_body>div.row”);
for(WebElement元素:所有行){
System.out.println(“Value==”+elem.getAttribute(“数据渲染器类型”);
}
我要做的是:

  • 使用
    List divs=driver.findelelements(By.xpath(“#zone_body.row”)
    获取项目(请注意,出于Selenium脚本稳定性和可维护性的考虑,需要仔细选择xpath)
  • 对列表进行流式处理,并对每个元素使用
    WebElement.getAttribute(“数据呈现器类型”)
    ,填充新列表或地图或任何您想要的数据类型
  • List elements=driver.findElements(by.xpath(//section[@id='zone\u body']//div[@class='row']);
    
    对于(int i=0;ido,其中id总是以name module开头,即id=“module……”是的,它们总是id=“module xxxx”@AshishKambleok,然后使用By.XPath(*//div[以(@id,'module')]开头)@Ajit不是提供定制的HTML,而是使用基于文本的实际相关HTML更新问题以供进一步分析。这就是我得到的值===null值====null值====null值===null值===null值===null值===null值===null是否尝试相同的代码,用“id”替换“data rendertype”并共享结果
    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"));
    }
    
    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"));
    }