selinium之三种等待

文章目录

    • 1.强制等待
    • 2.隐式等待
    • 3.显式等待

程序执行的速度要比浏览器渲染的速度要快很多
四种等待:强制等待隐式等待显示等待、流畅等待

需要注意:显示等待、隐式等待,不能同时使用,同时使用可能会出现意想不到的等待结果

1.强制等待

字如其意。每次页面渲染都会等待3秒(Thread.sleep(3000)),这个就会使 程序阻塞进行,这种方式在自动化测试中会用到,但用的不是特别多,这是因为

每一个自动化方法就是一个自动化测试用例,比如一个用例需要 10s,100测试用例 1000s,200个用例 2000s,这样耗费时间太多了,只能接受十几秒或几分钟内

   public void dilireba_test() throws InterruptedException {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver = new ChromeDriver(options);
        Thread.sleep(3000);
        driver.get("https://www.baidu.com");
        Thread.sleep(3000);
//        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#su")).click();
        Thread.sleep(3000);
        driver.quit();
    }

优点:语法简单,适合调试的时候用

缺点:需要等待固定的时间,造成时间的大量消耗。大大减少了自动化

2.隐式等待

隐式等待会作用于 driver 的整个生命周期在规定的时间范围内,轮询等待元素出现之后就立即结束,如果在规定时间的时间内元素仍然没有出现,则会抛出一个NoSuchElementException异常。

        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//写在任意一个位置都可以
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴")

优点:节省了大量的等待时间,元素展示之后(页面所有元素)就可以直接执行下一步,执行效率高

缺点:需要等待所有的元素(页面所有元素)都展现才会执行下一个,仍然会后额外的浪费

3.显式等待

 ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver = new ChromeDriver(options);
//        Thread.sleep(3000);
        driver.get("https://www.baidu.com");
//        Thread.sleep(3000);
//        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));

        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
//        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#su")).click();
//        Thread.sleep(3000);
        //创建显示等待对象foo
        WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3));
//判断查看当前元素是否存在  
//ExpectedConditions类提供了许多自动化检测的方法      
foo.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#\\34  > div > div > h3 > a")));
        exit(driver);
    }
    public void exit(ChromeDriver driver){
        driver.quit();

    }

优点:针对某一个元素来进行等待,极大降低了自动化整体等待的时间

缺点:代码复杂

你可能感兴趣的:(测试,开发语言,java,selenium)