Selenium中的几种等待方式,需特别注意implicitlyWait的用法
2016-10-11 09:42
537 查看
Selenium中的几种等待方式,需特别注意implicitlyWait的用法
时间 2014-02-27 15:32:17 CSDN博客原文 http://blog.csdn.net/pf20050904/article/details/20052485
主题 Selenium
最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法。
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
不明所以, 经过追踪源码才发现启动Driver的时候 使用driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 此处设置的等待时间 是针对全局设置的,webdriver中执行所有命令 的超时时间都设置为30秒了, 如上面的findElement方法,找不到元素会默认等待三十秒。 有些时候只需简单判断元素是否存在,立马执行,而此处的设置导致 脚本执行缓慢。 将Selenium中的等待时间贴出来给大家张张经验。
Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait).
1.显式等待
显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.
如:
1 | new WebDriverWait(driver, 15 ).until( |
2 | ExpectedConditions.presenceOfElementLocated(By.cssSelector( "css locator" )) |
3 | ); |
也可以这样写:
01 | WebDriver driver = new FirefoxDriver(); |
02 | driver.get( www.baidu.com ); |
03 | WebElement e = ( new WebDriverWait( driver, 10 )) .until( |
04 | new ExpectedCondition< WebElement>(){ |
05 | @Override |
06 | public WebElement apply( WebDriver d) { |
07 | return d.findElement( By.id( "id locator" )); |
08 | } |
09 | } |
10 | ); |
如果只是仅仅想判断页面是不是加载到某个地方了,就可以用第一种方法; 但如果需要得到某个WebElement,两种方式都可以,只是第一种方式还需要再多一步获取的操作.
1 | Wait w = new Wait(){ |
2 | @Override |
3 | public boolean until() { |
4 | return webElement.isDisplayed(); |
5 | } |
6 | }; |
2.隐式等待
1 | driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS); |
WebDriver会进行一个隐式等待,但参数只有时间,这就导致我需要什么元素出现,我不一定能等到它,
private boolean isElementPresent(By by) {
try {
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
相关文章推荐
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法(转)
- 转:Selenium中的几种等待方式,需特别注意implicitlyWait的用法
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
- Selenium中的几种等待方式,需特别注意implicitlyWait的
- selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)
- Selenium中的几种等待方式
- selenium使用等待的几种方式
- selenium处理页面等待时间的几种方式
- [Selenium] selenium — selenium三种等待方式解读,waituntil sleep等
- Selenium中implicitly_wait等待失效
- selenium处理 <a target=_blank 几种方式整理
- Linux内核中等待队列的几种用法
- javascript 自定义对象的几种方式和注意点
- Hibernate查询数据的几种方式以及HQL用法及参数的几种使用方法