【问题标题】:findelements(by.xpath()) returning only one index of my listfindelements(by.xpath()) 只返回我列表的一个索引
【发布时间】:2014-03-10 17:53:10
【问题描述】:

我这里的代码行是:

List<WebElement> element = driver.findElements(By.xpath("*"));
for(int i=0; i<element.size(); i++)
{
        System.out.println(i + element.get(i).getText());
} 

由于某种原因,在遍历列表时,它会将列表的一个索引中的所有元素返回给我。也就是说元素的大小只有1。

如何将元素返回到列表的多个索引中?

【问题讨论】:

  • 我不熟悉 xpath 的递归,试试By.cssSelector("*") 看看会发生什么。
  • 如果您添加要选择的 HTML,我们可以更好地为您提供帮助。
  • 没什么特别的,我只是将网络驱动程序指向谷歌主页。 cssselecctor 返回 100 多个我并不真正需要的对象。我只是想检索网站上的所有可点击对象。
  • 您希望通过使用 XPath * 获得什么? * 不是一个只获取可点击对象的表达式,所以我对你设想如何只找到可点击的对象感到困惑。
  • 好吧,一旦我可以列出所有元素,我就可以使用该列表做其他事情。可点击的对象只是我需要克服的更大的一步。

标签: java selenium xpath selenium-webdriver


【解决方案1】:

如果driver 位于文档的根部,那么* 只会匹配一个元素,即顶部的那个元素。如果您想选择整个文档中的所有元素,那么这将是正确的 XPath:

List<WebElement> element = driver.findElements(By.xpath("//*"));

请注意,HTML 元素的字符串值是它包含的文本加上其后代文本的组合,一直递归。例如在这个:

<p>
  <b>Here is some bold <i>italic</i> text.</b>
  Here is some normal text.
</p>

p元素的字符串值为:

Here is some bold italic text.
Here is some normal text.

b元素的字符串值为:

Here is some bold italic text.

i元素的字符串值为:italic

因此,如果您要实际选择所有元素并打印出它们的内容,您将会遇到一些重复。

【讨论】:

    【解决方案2】:

    通过“*”您选择了根 HTML 标记,这就是 count = 1 的原因。尝试仅用于测试,例如。 "//div"(如果你需要使用 XPath)看看你得到了什么。

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 2017-04-13
      • 2015-05-24
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多