【问题标题】:Capturing elements inside a div class在 div 类中捕获元素
【发布时间】:2018-11-21 09:51:35
【问题描述】:

下面是相同的代码

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

我正在测试一个网页,我正在尝试使用 selenium 和 Java 实现自动化。根据上面的 html 代码,我正在测试的每个页面都有这个标准的 16 种不同类型的数据渲染器类型,并且根据上面的代码,主体内的 8 个不同 div 类可以具有相同或不同的数据渲染器类型,例如上面有“imagesonly”,可以是任何随机顺序。我真正想要实现的是从所有 8 个中提取所有 data-renderertype 值(这不是一个常数,因为它可能因页面而异)不同的 div 类,以便可以将其存储并用于将其与不同版本的网站。我希望这是有道理的,任何帮助都将不胜感激,因为我现在不知所措,不知道从哪里开始。

【问题讨论】:

  • id 是否总是以名称模块开头,即 id="module......"
  • 是的,他们总是 id="module-xxxx" @AshishKamble
  • ok 然后使用 By.XPath("*//div[starts-with(@id,'module')]")
  • @Ajit 不提供 量身定制的 HTML,而是使用基于文本的实际相关 HTML 更新问题以供进一步分析。

标签: java arrays selenium selenium-webdriver webdriver


【解决方案1】:

你可以做这样的逻辑,

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

【讨论】:

    【解决方案2】:

    试试这个:

    List<WebElement> allRows = driver.findElements(By.cssSelector("#zone_body > div.row"));
    
    for( WebElement elem : allRows ){
    
       System.out.println("Value=== " + elem.getAttribute("data-renderertype"));
    }
    

    【讨论】:

    • 这是我得到的 Value=== null Value=== null Value=== null Value=== null Value=== null Value=== null Value=== null跨度>
    • 你会尝试相同的代码,只需将 'data-renderertype' 替换为 'id' 并分享结果
    【解决方案3】:

    我会做的是:

    1. 使用 List&lt;WebElement&gt; divs = driver.findElements(By.xpath("#zone_body .row")) 获取项目(请注意,为了 Selenium 脚本的稳定性和可维护性,需要仔细选择 XPath)
    2. 流式传输列表并为每个元素使用WebElement.getAttribute("data-renderertype"),填充您的新列表或地图或您想要的任何数据类型。

    【讨论】:

      【解决方案4】:
      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"));
      }
      

      这个sn-p将&lt;section id='zone_body' /&gt;标签下的所有&lt;div class='row'/&gt;元素放入元素列表,用for循环迭代列表以获取属性data-renderertype的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-02
        • 2020-08-02
        • 2011-03-10
        • 1970-01-01
        • 2018-05-16
        • 2022-11-23
        • 1970-01-01
        相关资源
        最近更新 更多