[ 登录注册 ]

语言

转:Selenium的延迟等待

2017-07-14 10:06:15 admin 返回上一页

标签:class   code   http   color   com   get   

Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait).

1.显式等待

显式等待就是明确的要等到某个元素的出现或者是某个元素的可点击等条件等不到就一直等除非在规定的时间之内都没找到那么就跳出Exception.

如:

1new WebDriverWait(driver 15).until(
2    ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator"))
3);

这里15是要等待的秒数.如果没有满足until()方法中的条件就会始终在这里wait 15秒依然找不到就抛出异常.

也可以这样写:

 

01WebDriver driver = new FirefoxDriver();
02driver.get( http://somedomain/url_that_delays_loading);
03WebElement 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.也就是页面元素.

如果只是仅仅想判断页面是不是加载到某个地方了就可以用第一种方法; 但如果需要得到某个WebElement两种方式都可以只是第一种方式还需要再多一步获取的操作.

1Wait w = new Wait(){
2    @Override
3    public boolean until() {
4        return webElement.isDisplayed();
5    }
6};

另外这种等待的方式在加载js代码的时候做判断会比较方便反正我只在代码里这么见过但是没用过有兴趣的朋友可以研究一下.

2.隐式等待

隐式等待我觉得就是不靠谱的等待看一段代码就明白了.

1driver.manage().timeouts().implicitlyWait(second TimeUnit.SECONDS);

WebDriver会进行一个隐式等待但参数只有时间这就导致我需要什么元素出现我不一定能等到它只是让driver延迟一段时间再继续而已. 不过我们也可以把它小小的封装一下变废为宝:

1public boolean isByElementDisplayed(By by int time) {
2    boolean status = false;
3    if (driver.findElement(by).isDisplayed() == false) {
4        driver.manage().timeouts().implicitlyWait(time TimeUnit.SECONDS);
5    else {
6        status = true;
7    }
8    return status;
9}

得不到某个元素我们就延迟一下...

最后还有一个最低效的做法:

1Thread.sleep()

额不建议使用.

转:Selenium的延迟等待布布扣bubuko.com

转:Selenium的延迟等待

标签:class   code   http   color   com   get   


文章来源:http://www.bozhiyue.com/yuyan/2017/0714/1484251.html
返回上一页    返回分类 上一篇:   下一篇:
相关