【selenium】元素三大等待方法

自动化测试为什么需要用到等待方法呢?

当通过selenium实现自动化测试的时候,驱动的页面代码加载时间各不相同,有的时候加载时间过长就会造成超时,超时之后,后面的代码就会找不到对应的元素,导致经常会报找不到元素的错误,所以为了保证自动化代码高可用和稳定性,引入了等待方法。

1.硬性等待

硬性等待Thread.sleep(millis),单位为毫秒;这是一种简单粗暴的等待方法,设置等待多长时间就等待多长时间。使用该方法需要抛出异常。

package com.test.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 *设置硬性等待时间
 *
 */
public class App 
{
    public static void main( String[] args ) throws InterruptedException
    {
        System.setProperty("webdriver.chrome.bin", "G:/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
       
        String url = "https://www.baidu.com/";
        System.out.printf("访问百度:",url);
        driver.get(url);
        driver.manage().window().maximize();
        //设置等待时间为4s
        Thread.sleep(4000);
        WebElement target = driver.findElement(By.id("kw"));
        target.sendKeys("selenium");
        driver.quit();
        System.out.println( "执行结束" );   
    }  
}

2.隐式等待

隐式等待是相对于硬性等待来说,更为灵活的一种等待方法,在设置的时间范围内不断的查找元素,直到找到元素或者超时,这种方法需要在webDriver实例化后使用,通过隐式等待实现代码等待,是针对全局的,在webDriver实例的整个生命周期都有效,然而这也是隐式等待的一个缺点,并不是所有的元素都需要用到等待。

package com.test.selenium;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 *设置隐式等待时间
 *
 */
public class App 
{
    public static void main( String[] args ){
        System.setProperty("webdriver.chrome.bin", "G:/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        //设置隐式等待,等待时间为3s
        driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        String url = "https://www.baidu.com/";
        System.out.printf("访问百度:",url);
        driver.get(url);
        driver.manage().window().maximize();
        WebElement target = driver.findElement(By.id("kw"));
        target.sendKeys("selenium");
        driver.quit();
        System.out.println( "执行结束" );   
    }  
}

3.显式等待

显式等待是在某个条件发生再继续执行后再继续执行后面的代码。是比较智能的等待方法。下面是比较常用的方法;

方法 描述
ExpectedConditions.invisibilityOfElementLocated 页面元素在页面存在并且可见
ExpectedConditions.elementToBeClickable 页面元素是否在页面上可用和可被单击
ExpectedConditions.elementToBeSelected 页面元素处于被选中的状态
ExpectedConditions.textToBePresentInElement 在页面元素中是否包含特定的文本
ExpectedConditions.presenceOfElementLocated 页面元素在页面中存在
   
   

 

相关代码实现如下:

package com.test.selenium;

import java.util.concurrent.TimeUnit;

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.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

/**
 *设置显式等待时间
 *
 */
public class App 
{
    public static void main( String[] args ){
        System.setProperty("webdriver.chrome.bin", "G:/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        String url = "https://www.baidu.com/";
        System.out.printf("访问百度:",url);
        driver.get(url);
        driver.manage().window().maximize();
        WebDriverWait wait = new WebDriverWait(driver,5);
        //页面元素在页面存在并且可见
        wait.until(ExpectedConditions.presenceOfElementLocated(By.id("kw")));
        WebElement target = driver.findElement(By.id("kw"));
        target.sendKeys("selenium");
        driver.quit();
        System.out.println("执行结束");   
    }  
}

 

posted @ 2022-04-17 17:54  小墨儿  阅读(106)  评论(0编辑  收藏  举报