Selenium的延迟等待
来源:互联网 发布:假身份证淘宝怎么搜 编辑:程序博客网 时间:2024/05/16 23:39
Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait).
1.显式等待
显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.
如:
1
2
3
new
WebDriverWait(driver,
15
).until(
ExpectedConditions.presenceOfElementLocated(By.cssSelector(
"css locator"
))
);
这里,15是要等待的秒数.如果没有满足until()方法中的条件,就会始终在这里wait 15秒,依然找不到,就抛出异常.
也可以这样写:
1
2
3
4
5
6
7
8
9
10
WebDriver driver =
new
FirefoxDriver();
driver.get( http:
//somedomain/url_that_delays_loading);
WebElement e = (
new
WebDriverWait( driver,
10
)) .until(
new
ExpectedCondition< WebElement>(){
@Override
public
WebElement apply( WebDriver d) {
return
d.findElement( By.id(
"id locator"
));
}
}
);
这样就通过回调函数,直接获得了这个WebElement.也就是页面元素.
如果只是仅仅想判断页面是不是加载到某个地方了,就可以用第一种方法; 但如果需要得到某个WebElement,两种方式都可以,只是第一种方式还需要再多一步获取的操作.
1
2
3
4
5
6
Wait w =
new
Wait(){
@Override
public
boolean
until() {
return
webElement.isDisplayed();
}
};
另外这种等待的方式,在加载js代码的时候做判断会比较方便,反正我只在代码里这么见过,但是没用过,有兴趣的朋友可以研究一下.
2.隐式等待
隐式等待,我觉得就是不靠谱的等待,看一段代码就明白了.
1
driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);
WebDriver会进行一个隐式等待,但参数只有时间,这就导致我需要什么元素出现,我不一定能等到它,只是让driver延迟一段时间再继续而已. 不过我们也可以把它小小的封装一下,变废为宝:
1
2
3
4
5
6
7
8
9
public
boolean
isByElementDisplayed(By by,
int
time) {
boolean
status =
false
;
if
(driver.findElement(by).isDisplayed() ==
false
) {
driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);
}
else
{
status =
true
;
}
return
status;
}
最后还有一个最低效的做法:
1
Thread.sleep()
额,不建议使用.
0 0
- Selenium的延迟等待
- Selenium的延迟等待
- Selenium的延迟等待
- Selenium的延迟等待
- Selenium的延迟等待
- Selenium的延迟等待
- Selenium的延迟等待
- selenium 延迟等待的三种方式
- Selenium显性等待的方式
- Selenium显示等待和隐式等待的区别
- selenium显示等待与隐士等待的区别
- selenium 的显示等待与隐式等待
- 提高selenium自动化的稳定性2-等待
- Selenium等待元素的处理方法
- selenium 常用的显式等待
- 详解Python selenium的等待方式
- 解读Python selenium的等待方式
- Selenium:元素等待的4种方法
- 杭电ACM1431——素数回文~~打表法
- opencv日常学习之给ROI,以及给图片加水印
- HBase 简介以及个人理解(原理,基本概念,基本架构)
- iOS中对象属性的归档和解档(runtime+KVC)快捷解决方案
- 使用Eclipse查看java源码
- Selenium的延迟等待
- 指针输出与取地址符输出
- 3196: Tyvj 1730 二逼平衡树
- C++ 中BSS、数据段、代码段、堆、栈的区别
- 洛谷1018 乘积最大
- vim应用
- 形态学滤波对图像进行边缘及角点检测
- WebDriver封装GET方法来解决页面跳转不稳定的问题
- rails yaml with expression or variable (Using ERB in YAML Configuration File)