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都是获取信息而不是在本地存储信息.
有没有更快或可并行化的方法来做到这一点?
问题是,您无法使 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)
| 归档时间: |
|
| 查看次数: |
3856 次 |
| 最近记录: |