当前位置: 首页 > 面试题库 >

如何以最少的等待时间加速Java Selenium脚本

厍光霁
2023-03-14
问题内容

我目前正在研究Java硒项目,该项目通常是一个小脚本,在该脚本中,我必须检查每个元素是否存在,并基于该操作触发了一些操作,但我们主要关心的是完成脚本的持续时间。

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

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

和它一起

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

要么

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

我知道我可以使用CSS选择器,但由于DOM Tree结构的原因,这是不可行的。什么可以代替

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

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


问题答案:

您的方法存在一些问题。

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

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

  3. 主要问题是在检查不存在的内容时启用了隐式等待…尤其是10s等待。这意味着,每次检查元素时,Selenium都会等待10秒,即使它期望它不存在。

关闭隐式等待(将其设置为0),然后对您不希望出现的元素进行存在性检查,然后再将其重新打开,将为您提供更好的服务。那将是10s
x您希望不存在的存在检查数。根据您执行的存在检查次数,这可能会花费大量时间。不利的一面是,如果您有一个带有后台进程的复杂页面,则需要先等待页面(或页面的一部分)完成加载,然后再检查是否隐式等待关闭元素的存在。

旁注…硒贡献者指出,不应使用隐式等待。使用WebDriverWait代替,但这是一个完整的其他讨论。



 类似资料:
  • 问题内容: 我找不到如何测量线程等待锁定的时间。我必须确定一个线程是否正在等待锁定超过1秒,如果需要,则运行另一个线程。谢谢! 问题答案: 试试这个:

  • Selenium C#在抛出超时异常之前等待的最大显式超时是多少? 有时我们正在测试的应用程序变得非常慢,最多需要4分钟才能加载。我想添加一个等待时间,这样它最多会等待5分钟。 我已经尝试过这个代码 但是它在2分钟左右抛出超时异常。

  • 由于我正在使用的网站的随机加载时间,我必须等待某些html元素出现才能使用它们。我利用了时间。用于测试目的的sleep命令,但现在要优化所有内容。我尝试过各种来自网络的明确的等待建议,但它们在某个点上都发生了冲突。 下面是一个代码示例: 提前谢谢各位!

  • 问题内容: 我正在编写一个自动化测试程序,该程序将测试某些Web程序,这些程序有时加载某些AJAX调用的速度很慢。例如,用户将单击“查询”,这将在15到90秒的任何时间产生HTML“加载”叠加。搜索完成后,它将使用结果更新同一页面上的表。 所以很明显我可以像这样单独增加等待时间: 但是有没有办法修改(在我的情况下增加)时间,因此Watir-Webdriver 总是 等待90秒,如下所示: 请注意以

  • https://www.hackerrank.com/challenges/minimum-average-waiting-time/problem这是一个hackerrank问题的链接。我正在努力。它通过了一些测试用例,失败了一些。我在STL中使用了内置的优先级队列模板。代码如下, 我针对这个问题查找了一个叫做非抢占式优先调度的算法并实现了它。我的疑问:这个调度算法是解决问题的正确算法吗?我想知

  • 我很难理解如何在Express中正确编写使用async/await的中间件,但在执行后不会让Promise漂浮在以太网上。我已经阅读了大量的博客和StackOverflow帖子,似乎对于在async/await中间件中使用以下模式有一些共识: 我知道这使得在所有aysnc路由处理程序中不必使用try… catch逻辑成为可能,并且它确保(async(req, res, next)=返回的Promi