• 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();
      }
    }
    
  • 相关阅读:
    win10下的MyEclipse2017 ci7 破解教程+全套资源+失败处理(转)
    layui layer.open() 弹层开启后 Enter回车 遮罩层无限弹处理
    layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法(转)
    layui弹出层两个以上置顶弹出
    div自动获焦并将光标定位到最后
    hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
    形参与实参的区别
    linux下安装Mysql(干货!!!)解决mysql 1130问题,远程登录问题
    linux下安装Mysql(干货!!!)
    java文件上传与下载
  • 原文地址:https://www.cnblogs.com/zhizhao/p/11303296.html
Copyright © 2020-2023  润新知