zoukankan      html  css  js  c++  java
  • 元素的多种延时等待(&页面的超时处理)

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

    /**

    * 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");

      }

  • 相关阅读:
    python-设计模式:抽象类
    python协程的使用
    python生成器异步使用
    python2和python3的内存使用情况
    python基础
    python对象序列化pickle
    docekr-image的区别和container;docker run和start,create
    airflow 安装配置celery+rabbitmq celery+redis
    Centos7 安装部署 Airflow
    centos7 安装后静态ip的配置
  • 原文地址:https://www.cnblogs.com/doris0122/p/9976354.html
Copyright © 2011-2022 走看看