Selenium的延迟等待

http://my.oschina.net/u/928852/blog/98885

 

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()

额,不建议使用.

第一次发文,大家多提意见.

 

转载于:https://www.cnblogs.com/201dom/p/5166779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值