我目前正在开发一个 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
这是为了检查元素是否存在,并基于此我必须触发多个其他操作。
最佳答案
您的方法存在一些问题。
.implicitlyWait()
实际上并不等待。它为驱动程序实例设置超时,因此您只需设置一次,而不是每次都调用它等待。driver.findElement(...).isEmpty()
无法编译。也许您的意思是.findElements()
?无论哪种方式,.isEmpty()
与.size() > 0
的速度差异都可以忽略不计。主要问题是您在检查某些内容不存在时启用了隐式等待...尤其是 10 秒的等待。这意味着每次检查一个元素时,Selenium 都会等待 10 秒,即使它预计该元素不存在也是如此。
您可以通过关闭隐式等待(将其设置为 0)获得更好的服务,然后检查是否存在您认为不存在的元素,然后再将其重新打开。那将是 10s x # 你认为不存在的存在检查。根据您进行的存在性检查的数量,这可能会花费很多时间。这样做的一个缺点是,如果您有一个带有后台进程的复杂页面,您将需要等待页面(或页面的一部分)完成加载,然后再检查是否存在具有隐式等待的元素。
旁注... Selenium 贡献者声明不应使用隐式等待。使用 WebDriverWait
代替,但那是另一个讨论。
关于java - 如何以最少的等待时间加速 Java Selenium Script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53779112/