[英]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文档节点的必需信息。 例如
driver.getPageSource();
获取完整的页面源代码driver.getPageSource();
这是一个例子 :
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.