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

Jor*_*ssi 5 java selenium selenium-webdriver

我希望WebElement用selenium快速获取页面上每个类的class属性.目前,我正在做以下事情:

allElements = new ArrayList<WebElement>(m_webDriver.findElements(By.cssSelector("*")));

for (WebElement element : allElements) {
    String className = element.getAttribute("class");
}
Run Code Online (Sandbox Code Playgroud)

这个过程非常缓慢,在包含500个元素的页面上花费超过30秒.我尝试并行化getAttribute调用,这是该方法中最慢的部分,但没有速度增加.这让我相信每次调用getAttribute都是获取信息而不是在本地存储信息.

有没有更快或可并行化的方法来做到这一点?

ale*_*cxe 5

问题是,您无法使 selenium 发送getAttribute()多个元素的批量调用。这是我研究过的一个类似问题 - 它是关于isDisplayed()为多个元素工作,而不是为列表中的每个元素发出 JSON Wire 协议请求:

但是,与这个问题相反isDisplayed(),这里我们可以执行 javascript 并可靠地获取页面上每个元素的类属性值,如下所示:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("var result = []; " +
"var all = document.getElementsByTagName('*'); " +
"for (var i=0, max=all.length; i < max; i++) { " +
"    result.push({'tag': all[i].tagName, 'class': all[i].getAttribute('class')}); " +
"} " +
" return result; ");
Run Code Online (Sandbox Code Playgroud)