使用Java中的Selenium快速获取每个WebElement的class属性

时间:2015-06-08 18:38:15

标签: java selenium selenium-webdriver

我希望使用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都会获取信息而不是在本地存储信息。

有更快或可并行的方法吗?

2 个答案:

答案 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");
}