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

1.显式等待

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

如:

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

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

也可以这样写:

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

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

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

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

2.隐式等待

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

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

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

1 public 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 }

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

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

1 Thread.sleep()

额,不建议使用.

最新文章

  1. CentOS6 下MySQL option file
  2. 李洪强iOS开发本人集成环信的经验总结_02_基本配置
  3. hdoj Last non-zero Digit in N! 【数论】
  4. nexus 的使用及maven的配置
  5. 通知传值 notification
  6. React——高阶组件
  7. SpringBoot学习笔记
  8. linux下centos6.8相关配置,以及音频相关配置
  9. An internal error occurred during: &quot;Building workspace&quot;. java.lang.StackOverflowError
  10. 毫秒级检测!你见过带GPU的树莓派吗?
  11. Editorial Board 、co-editor、ediitor、editor-in-chief的区别
  12. maintenance.go
  13. Machine Learning 第一二周
  14. javaMail发邮件,激活用户账号
  15. C# AsyncCallback异步回调用法示例
  16. js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的
  17. 自己实现strtok函数
  18. 10G整数,找出中位数
  19. Vmware10 Centos7 共享文件夹设置方法
  20. Google zxing实现二维码扫描完美解决方案

热门文章

  1. H5的新应用-在地图上标识附近加油站的地址
  2. oc知道经纬度求位置
  3. uCGUI的文字与数值显示方法
  4. GsonFormat 报错
  5. linuxmint计算器
  6. Inno Setup入门(九)&mdash;&mdash;修改安装过程中的文字显示
  7. 连接SQLServer OLEDB数据库(ACCESS) ODBC Oracle
  8. php+redis实现电商秒杀功能
  9. Anton and Chess
  10. static方法与非static方法是否可以互相调用