java - 如何以最少的等待时间加速 Java Selenium Script

标签 java selenium-webdriver xpath css-selectors webdriver-w3c-spec

我目前正在开发一个 java selenium 项目,它通常是一个小脚本,我必须在其中检查每个元素是否存在,并基于此触发一些操作,但我们主要关心的是完成脚本的持续时间.

基本上,我在我的脚本中使用了下面的每一个并运行了测试,尽管在每种情况下脚本都在运行,但我发现脚本执行持续时间的速度改进很小。我正在使用 wait

driver.manage().timeouts().implicitlyWait(10000,TimeUnit.MILLISECONDS);

和它一起

!(driver.findElement(By.xpath("Element Xpath)).isEmpty()) 

driver.findElements(By.xpath("Element Xpath)).size()>0

我知道我可以选择 CSS 选择器,但在我的情况下,由于 DOM 树结构,这是不可行的。 可以用什么代替

driver.findElements(By.xpath("Element Xpath)).size()>0

这是为了检查元素是否存在,并基于此我必须触发多个其他操作。

最佳答案

您的方法存在一些问题。

  1. .implicitlyWait() 实际上并不等待。它为驱动程序实例设置超时,因此您只需设置一次,而不是每次都调用它等待。

  2. driver.findElement(...).isEmpty() 无法编译。也许您的意思是 .findElements()?无论哪种方式,.isEmpty().size() > 0 的速度差异都可以忽略不计。

  3. 主要问题是您在检查某些内容不存在时启用了隐式等待...尤其是 10 秒的等待。这意味着每次检查一个元素时,Selenium 都会等待 10 秒,即使它预计该元素不存在也是如此。

您可以通过关闭隐式等待(将其设置为 0)获得更好的服务,然后检查是否存在您认为不存在的元素,然后再将其重新打开。那将是 10s x # 你认为不存在的存在检查。根据您进行的存在性检查的数量,这可能会花费很多时间。这样做的一个缺点是,如果您有一个带有后台进程的复杂页面,您将需要等待页面(或页面的一部分)完成加载,然后再检查是否存在具有隐式等待的元素。

旁注... Selenium 贡献者声明不应使用隐式等待。使用 WebDriverWait 代替,但那是另一个讨论。

关于java - 如何以最少的等待时间加速 Java Selenium Script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53779112/

相关文章:

Java Selenium - 使用 xpath 从具有相同类名的多个 div 中查找字符串文本

c# - WebDriverWait 如何等到项目存在或不存在?

xpath - Xpath返回从第n个开始的所有h2节点

java - Android webview进度条无论有没有网络都会持续加载

java - 在 Java 中将输入流转换为数组的最佳方法是什么?

java XMLSerializer 避免复杂的空元素

java - 在java selenium中,我试图将退格字符 ('\uE003' ) 或 (\u0008) 发送到文本框以清除现有文本

java - Spark Yarn Cluster 连接到 Hbase 错误

php xpath根据多个属性和父属性检索属性值

javascript - PHP Xpath JS 如何用 JS 从网站获取内容?