我希望使用selenium快速获取页面上每个WebElement
的class属性。目前,我正在做以下事情:
allElements = new ArrayList<WebElement>(m_webDriver.findElements(By.cssSelector("*")));
for (WebElement element : allElements) {
String className = element.getAttribute("class");
}
此过程速度极慢,在包含500个元素的页面上花费超过30秒。我尝试并行化getAttribute
调用,这是该方法中最慢的部分,但没有速度增加。这让我相信每次调用getAttribute
都会获取信息而不是在本地存储信息。
有更快或可并行的方法吗?
答案 0 :(得分:4)
问题是,你不能让selenium发送批量getAttribute()
多个元素的调用。这是一个我已经研究过的类似问题 - 它是关于制作{{1为多个元素工作而不为列表中的每个元素发出JSON Wire协议请求:
但是,与这个isDisplayed()
问题相反,这里我们可以执行javascript并可靠地获取页面上每个元素的类属性值,这样就可以让你入门:
isDisplayed()
答案 1 :(得分:1)
我会保持简单并使用XPath而不是复杂的Javascript片段:
// get all elements where class attribute is not null
List<WebElement> allElements = m_webDriver.findElements(
By.xpath(".//*[@class and not(ancestor::div[contains(@style,'display:none')])]")
);
for (WebElement element : allElements) {
String className = element.getAttribute("class");
}