【问题标题】:List of WebElement find by className return Xpath按类名查找的 WebElement 列表返回 Xpath
【发布时间】:2016-04-25 10:47:03
【问题描述】:

我在一个网页上有多个具有相同类属性的 div。 我正在寻找一种方法来检查页面的所有 div 是否有特定的类名,然后为每个 div 获取它们的 Xpath。

实际上,我可以用类名检查页面上有多少个 div:

     List<WebElements> test = driver.findElements(By.className("fitter"));
     int countDiv = test.size();

你现在有什么想法,将我的所有元素 Xpath 一个一个地获取吗?或者你有什么不同的解决方案?

我的项目是一个 Selenium 项目,我正在测试一个网页。我的测试是用 Java 编写的,我使用的是 WebDriver。

感谢帮助

【问题讨论】:

  • 您的意思是要为列表中的每个元素自动获取唯一的XPath
  • 是的,就是这样!我知道我可以直接通过.Xpath 得到它,但问题是 div 的数量是可变的。所以每次获取它们的唯一方法是按类获取它们,然后让 Xpath 在本地执行
  • findElements 方法应该返回元素数组。为什么不通过每个元素的唯一索引选择器来调用它们?
  • 这是一个动态显示,所以我不知道我的页面上会有多少元素
  • 但是可以通过数组长度获取元素个数

标签: java html selenium xpath


【解决方案1】:

简单地遍历 webelements 列表?

List<WebElement> elements = driver.findElements(By.className("fitter"));
for (int i = 0; i < elements.size(); i++) {
    WebElement element = elements.get(i);
    // ... do whatever you need here
}

循环中每个元素的 xpath 将是

//div[contains(@class, 'fitter')][i]

【讨论】:

  • 谢谢,但我的问题是“在这里做任何你需要的事情” ^^ 为每个 Xpath 获取。我可以做一个 element.getXpath 什么的吗?
  • 我认为在一般情况下没有办法为每个元素单独提取 xpath。但是如果你已经有了类名,你可以使用类似driver.findElement(By.xpath("//*[contains(@class, 'fitter')][i]"));
  • 很自然,每个元素的 xpath 是 "//*[contains(@class, 'fitter')][i]" 其中 i 是循环的控制变量。如果你只想专注于div,那么它是"//div[contains(@class, 'fitter')][i]"
  • @MxfrdA,我已更新答案以显示可用于每个元素的 xpath
  • 谢谢,我会试试这个并反馈给你
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多