• Selenium常用API的使用java语言之11-设置元素等待


    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);
     
        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();
      }
    }
    
  • 相关阅读:
    网站访问量大 怎样优化mysql数据库
    BootStrap 模态框禁用空白处点击关闭
    常用SQL语句
    诅咒JavaScript之----ArcGIS JavaScript 点聚合 ClusterLayer
    模态框与 天地图地图控件冲突
    FXK Javascript
    从列表中或数组中随机抽取固定数量的元素组成新的数组或列表
    wangEditor
    手把手教你用vue-cli构建一个简单的路由应用
    解决eclipse端口被占用的问题
  • 原文地址:https://www.cnblogs.com/zhizhao/p/11303296.html
Copyright © 2020-2023  润新知