【问题标题】:How to count IMG tags within DIV using Xpath如何使用 Xpath 计算 DIV 中的 IMG 标签
【发布时间】:2020-02-15 15:39:23
【问题描述】:

我想统计表面div标签下有多少IMG标签,并回显数量。

<div id="surface" style="width: 4567px; height: 4137px; left: -1850px; top: -1152px; cursor: default;">


<img src="https://media.memories.png" data-seat="L:106|EE:5" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2221px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-seat="L:106|EE:6" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2237px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-seat="L:106|EE:7" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2253px; top: 1561px; display: block;">


<img src="https://media.memories.png" data-seat="L:106|EE:8" data-pl="1" style="position: absolute; cursor: pointer; width: 14px; height: 14px; left: 2269px; top: 1561px; display: block;">


</div>

这是我获取计数的无效尝试,但它没有返回计数以在 selenium IDE 中运行我的测试。

"//div[@surface='data-seat']/img"

【问题讨论】:

  • 欢迎来到 Stack Overflow!请向我们展示您到目前为止所做的尝试。
  • Xpath 结果可以是 NUMBER_TYPE。尝试在 xpath 表达式中使用 count() 函数。

标签: java selenium-webdriver xpath java-8 webdriverwait


【解决方案1】:

选项 1: 您可以简单地使用下面的 xpath,然后获取计数。

图像的 xpath - "//div[@id='surface']/img"

System.out.println(driver.findElements(By.xpath("//div[@id='surface']/img")).size());

选项 2: 如果你想让它更复杂,使用js运行查询并返回计数。

JavascriptExecutor js = (JavascriptExecutor) driver;
Long number_of_imgs = (Long) js.executeScript("return document.querySelectorAll(\"div[id='surface'] img\").length");
System.out.println(number_of_imgs);

我更喜欢选项 1。

【讨论】:

  • 仅供参考,我们在选项 2 中使用 CSS 而不是 xpath。
  • 谢谢,我能够在 //div[@id='surface']/img 上使用 store xpath count 并回显 IMG 标签的结果。
【解决方案2】:

试试:

//div[@surface='data-seat']/count(img)

对于您的示例 html,它会输出 4

【讨论】:

    【解决方案3】:

    您可以使用 XPath-1.0 表达式

    count(//div[@id='surface']/img)
    

    它计算所有div 元素的所有img 子元素。

    【讨论】:

      【解决方案4】:

      要在&lt;div&gt; 标记内打印&lt;img&gt; 标记的计数,您需要为visibilityOfAllElementsLocatedBy() 诱导WebDriverWait,您可以使用关注Locator Strategies

      • xpath:

        System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@id='surface']//img"))).size());
        
      • cssSelector:

        System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div#surface img"))).size());
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 2015-04-19
        • 2023-03-09
        相关资源
        最近更新 更多