繁体   English   中英

Java Selenium无法使用By.xpath(“ // *”)在DOM中找到所有元素

[英]Java Selenium fails to find all elements in the DOM using By.xpath(“//*”)

我有一个奇怪的场景,我无法在DOM中找到所有元素。

通过Firefox /“检查元素”查看DOM时,我清楚地看到了一些用Java / Selenium生成的元素列表中不存在的“ div”元素:

List<WebElement> elements = webDriver.findElements(By.xpath("//*"));

我怀疑上面的行没有提供任何不可见元素的子元素。

如果我的怀疑不正确,那么任何人都可以解释我所看到的原因吗?

否则,如果确实如此,那么解决该问题的唯一方法就是遍历所有不可见元素并使它们可见。

有没有更好的方法来解决此问题?

如果是,那是什么?

如果没有-如何使所有元素可见(也许使用JavascriptExecutor)?

谢谢

另一个选择是元素位于框架中。 在这种情况下,您必须调用webDriver.switchTo().frame(String name) 别忘了之后再切换回去,最好使用webDriver.switchTo()。defaultContent()。

我认为硒也可以访问不可见元素。 我一直在访问一些我自己看不见的元素。 但是您无法与他们互动。

当然,正如德米特里(Dmitry)所建议的那样,以这种方式获取所有元素实际上不是可行的方法。

我建议使用单独的HTML Parser库,以获取所有html文档节点的必需信息。 例如

  1. 使用driver.getPageSource();获取完整的页面源代码driver.getPageSource();
  2. 使用http://jsoup.org或任何其他解析器来解析文档并提取所需的数据

这是一个例子

   String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
   Document doc = Jsoup.parse(html);
   Element link = doc.select("a").first();

   String text = doc.body().text(); // "An example link"
   String linkHref = link.attr("href"); // "http://example.com/"
   String linkText = link.text(); // "example""

   String linkOuterH = link.outerHtml(); 
    // "<a href="http://example.com"><b>example</b></a>"
   String linkInnerH = link.html(); // "<b>example</b>"

我想补充一点,通过WebDriver查询所有元素的操作非常慢。 我在我的宠物项目Page Recorder中遇到了这个问题。
解决方案是使用HtmlAgilityPack – .NET HTML Parser-以便在所有文档节点上执行操作。

发现问题:

当我通过Firefox / Inspect Element查看网页时,窗口已最大化。

当我使用Java / Selenium抓取网页时,窗口没有最大化。

在我正在处理的特定网页中,一旦窗口达到一定大小(客户端可能正在运行一些javascript代码),就会添加一些元素(通常是广告)(变为“未隐藏”)这个)。

当前的问题不在Selenium之内。

为了解决这个问题,只需添加以下行:

webDriver.manage()窗口()最大化()。;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM