博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
元素的多种延时等待(&页面的超时处理)
阅读量:6280 次
发布时间:2019-06-22

本文共 1730 字,大约阅读时间需要 5 分钟。

有时候页面元素不是当下就出现的,这个时候就需要等待元素出现后再继续后面的操作了。

/**

* 1. 线程休眠---Thread.sleep(long millis);

* 强制等待,硬性等待--不确定具体需要等待多久时间的时候,容易造成时间的浪费

* 例子:Thread.sleep(2000);

* 2. 隐式等待---TimeOuts--implicitlyWait

* 设置方式:driver.manage.timeouts().implictlyWait(long time,TimeUnit unit)

* 例子:driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

* 特点:相对灵活(优),设置是针对全局的,在WebDriver实例整个生命周期有效,但并不是所有元素都需要等待(缺)

* 3. 显式等待--可以自己指定某个元素需要等待(在有必要进行等待的时候再执行等待)

* 每隔0.5秒扫描一次页面,检查元素是否满足等待结果条件,比如查找元素,则检查元素是否存在,存在的话返回true,不存在则继续等待,知道找到或超时。

* 特点:不是针对全局的,只有需要进行等待的元素才执行等待,可以自己设置场景(条件),条件满足时再继续执行

*/

显式等待的代码如下:

/**

* 智能查找元素方法,设置任意等待时间

* @param by

* @param timeOutInSeconds

* @return

*/

public WebElement getElement(By by,long timeOutInSeconds) {

  WebDriverWait wait=new WebDriverWait(driver, timeOutInSeconds);

  WebElement element=wait.until(new ExpectedCondition<WebElement>() {

    public WebElement apply(WebDriver driver) {

      return driver.findElement(by);

    }

   });

  return element;

  }

/**

* 智能查找元素方法,设定等待时间为5s

* @param by

* @return

*/

public WebElement getElement(By by) {

  return getElement(by,5);

}

PS: 有时对于页面加载时间有要求时,需要处理一下超时时页面仍位加载完成的情况:

public void f(){

  try {

  //页面超时3s,需要设置在get请求之前

  driver.manage().timeouts().pageLoadTimeout(3, TimeUnit.SECONDS); 

  driver.get("https://docs.seleniumhq.org/download/");

  //get:需要等待网页的所有请求全部加载完毕,才会进行下一步的操作:当前页面资源,异步请求(其他站点)

  } catch (ImeNotAvailableException e) {

    System.out.println("页面加载超时,提bug");

    //超时后仍想后续的操作--让页面停止加载继续后面的操作,可以提高脚本的执行效率

    //js执行器让页面停止加载

    JavascriptExecutor javascriptExecutor=(JavascriptExecutor) driver;

    javascriptExecutor.executeScript("window.stop()");

    }

  getElement(By.id("q")).sendKeys("driver");

  }

转载于:https://www.cnblogs.com/doris0122/p/9976354.html

你可能感兴趣的文章
ExtJs中column与form布局的再次领悟
查看>>
asp.net MVC2 初探十一
查看>>
C++/CLI思辨录之Object的对象布局
查看>>
Windows 7优化调整使用小技巧
查看>>
使用 “Unicode 字符集 ” 使用错误,应该使用 “使用多字节字符集”
查看>>
C中如何实现C++中的默认参数?
查看>>
某直播App问题分析
查看>>
InnoDB引擎的索引和存储结构
查看>>
Selenium私房菜系列8 -- 玩转Selenium Server
查看>>
重学自动控制 PID
查看>>
游戏演示(包含源码)[名称待定]
查看>>
浅析SQL Server实现分布式事务的两阶段提交协议2PC
查看>>
IBM WebSphere 产品介绍
查看>>
结构型模式之Adapter模式
查看>>
仅用18天,英伟达新型GAN合成真假难辨高清明星脸
查看>>
C# 泛型编程之泛型类、泛型方法、泛型约束
查看>>
MAT文件操作
查看>>
【英语天天读】Heart of a stranger 陌生的心灵
查看>>
wp7 Emulator模拟器停止工作原因
查看>>
iBATIS.net直接执行sql语句
查看>>