ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何以最短的等待时间加速Java Selenium Script

2019-09-23 07:10:47  阅读:318  来源: 互联网

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


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

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

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

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

解决方法:

您的方法存在一些问题.

> .implicitlyWait()实际上并没有等待.它设置驱动程序实例的超时,因此您只需将其设置一次,而不是每次要等待时调用它.
> driver.findElement(…).isEmpty()将无法编译.也许你的意思是.findElements()?无论哪种方式,.isEmpty()vs .size()> 0的速度差异可以忽略不计.
>主要问题是,在检查不存在的内容时,您启用了隐式等待…尤其是等待10秒.这意味着每次检查一个元素时,Selenium会等待10秒,即使它不希望它存在.

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

旁注…… Selenium贡献者已经声明不应该使用隐式等待期.请改用WebDriverWait,但这是另一个讨论.

标签:java,css-selectors,selenium-webdriver,xpath,webdriver-w3c-spec
来源: https://codeday.me/bug/20190923/1814387.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有