加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Selenium等待元素的处理方法

(2017-09-20 05:35:45)
分类: selenium

1.Thread.sleep()这个方法是最不推荐的,是用线程等待的方式来实现,每次元素出现在页面的时间不一样,如果设置的时间长了,白白浪费了时间,如果设置的时间短了,脚本依然会报没有找到元素的错误。

 

2.driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);这个方法实际上跟上面那个是一样的,也不推荐

 

3.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);这个也是WebDriver的一个方法,是每个driver自己去实现设置超时时间,在当前页面找元素的时候,首先去找web元素,如果没有找到,判断时间否超超过设置的时间,如果没有超过,则再次找这个元素,直到找到元素或者时间超过设置时间。那我们就可以设定一个比较长的超时时间,但同时也不会让程序白白的等待。
这种方式就相对来说灵活一点了,但是有个问题,这个设置是针对全局的,并不是所有的元素都需要等待,比如页面上用js来实现的,点一个按钮或者把鼠标移动到某个区域就会出现期望的元素,这个时候driver也会去执行等待的方法,一两次的时间浪费可能不多,累积起来就很多了。从另一方面,如果期望某个元素在指定的时间内没有出现,这个方法就会浪费很多的方法了

 

4.private boolean waitForElement(final By elementLocator) {

        try {
            WebDriverWait driverWait = (WebDriverWait) new WebDriverWait(driver, 30, 500).ignoring(
                    StaleElementReferenceException.class).withMessage("元素在30秒内没有出现!");
            return driverWait.until(new ExpectedCondition() {

                public Boolean apply(WebDriver driver) {

                    try {
                        if (driver.findElement(elementLocator).isDisplayed()) {
                            return false;
                        }
                    } catch (IndexOutOfBoundsException e) {
                    } catch (NoSuchElementException e) {
                    }

                    return true;
                }
            });
        } catch (Exception e) {
            return false;
        }

    }

500毫秒扫描一次页面,检查元素是否存在,存在的话返回true,不存在继续等到,直到等到时间超过30秒报错。这个方法就完美解决了上面的所有问题,力荐这个方法。

 

5. waitForCondition

waitForCondition("selenium.browserbot.getUserWindow().$.active == 0;", 30000);

waitForCondition("(selenium.browserbot.getCurrentWindow().document.readyState=='interactive') || "
                            + "(selenium.browserbot.getCurrentWindow().document.readyState=='complete');", 30000)
;

这个方法是调用JS来实现等待,目前我的框架中用得比较多的是等待整个页面加载完全,而不是指定的元素

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有