zoukankan      html  css  js  c++  java
  • 8.selenium之设置元素等待

    WebDriver提供了两种类型的等待:显式等待和隐式等待。

    1.显示等待

    WebDriver提供了显式等待方法,专门针对某个元素进行等待判断。

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.support.ui.WebDriverWait;
    import org.openqa.selenium.support.ui.ExpectedCondition;
     
     
    public class TimeOut01 {
     
      public static void main(String[]args) throws InterruptedException {
     
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");
     
        //显式等待, 针对某个元素等待
        WebDriverWait wait = new WebDriverWait(driver,10,1);
        //调用java内部类
        wait.until(new ExpectedCondition<WebElement>(){
          @Override
          public WebElement apply(WebDriver text) {
                return text.findElement(By.id("kw"));
              }
        }).sendKeys("selenium");
     
        driver.findElement(By.id("su")).click();
        Thread.sleep(2000);
     
        driver.quit();
      }
    }

    WebDriverWait类是由WebDirver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:
    WebDriverWait(driver, 10, 1)
    driver: 浏览器驱动。 10: 最长超时时间, 默认以秒为单位。 1: 检测的的间隔(步长) 时间, 默认为 0.5s。

    2.隐式等待

    WebDriver 提供了几种方法来等待元素。

    • implicitlyWait。识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出NoSuchElement异常。
    • setScriptTimeout。异步脚本的超时时间。WebDriver可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间。
    • pageLoadTimeout。页面加载时的超时时间。因为WebDriver会等页面加载完毕再进行后面的操作,所以如果页面超过设置时间依然没有加载完成,那么WebDriver就会抛出异常。
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.By;
    import java.util.concurrent.TimeUnit;
     
    public class TimeOut02 {
     
      public static void main(String[] args){
     
        WebDriver driver = new ChromeDriver();
     
        //页面加载超时时间设置为 5s
        driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
        driver.get("https://www.baidu.com/");
     
        //定位对象时给 10s 的时间, 如果 10s 内还定位不到则抛出异常
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.findElement(By.id("kw")).sendKeys("selenium");
     
        //异步脚本的超时时间设置成 3s
        driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);
     
        driver.quit();
      }
    }
  • 相关阅读:
    【并发】实现内存可见的两种方法比较:加锁和volatile变量
    HTTP2资料汇总
    微服务框架servicecomb
    【并发】使用synchronized获取互斥锁的几点说明
    【并发】通过同步保证内存可见性
    数据最终一致性方案设计
    Oracle中Constraint的状态参数initially与deferrable
    ORACLE GROUPING函数的使用
    Oracle INSERT WITH CHECK OPTION的用法
    ORACLE VERSIONS 用法
  • 原文地址:https://www.cnblogs.com/peiminer/p/13564541.html
Copyright © 2011-2022 走看看