• java+selenium3-等待机制


    等待机制

    实际问题

    当我们在用selenium定位元素时,需要页面元素加载完成后才能操作,否则会抛出异常,所以在测试中添加合理的等待时间是非常必要的。

    selenium提供了多种等待机制:显示等待、隐式等待和流畅等待。

    显示等待

    显示等待比隐式等待更节约测试脚本执行的时间,使用ExceptedCondtions类中的方法可以进行显示等待的判断。

    显示等待可以自定义等待的条件,用于更加复杂的页面元素判断。

    常用的显示等待条件

    等待条件 WebDriver方法
    页面元素是否在页面上可用和可被单击 elementToBeClickable(By locator)
    页面元素处于被选中状态 elementToBeSelected(WebElement element)
    页面元素在页面中存在 presenceOfElementLocated(By locator)
    在页面元素中是否包含特定的文本

    textToBePresentInElement(By locator)

    页面元素值  textToBePresentInElementValue(Bylocator locator, String text)
    标题 titleContains(String title)

    test.html

    <!DOCTYPE html>
    <html>
    <head>
        <title>你喜欢的水果</title>
    </head>
    <body>
        <p>请选择你喜欢的水果</p><br>
        <select name="fruit">
            <option id="peach" value="taozi">桃子</option>
            <option id="watermelon" value="xigua">西瓜</option>
        </select>
        <br>
        <input type="checkbox" name="是否喜欢水果"></input>
        <br><br>
        <input type="text" id="text" value="今天的西瓜相当甜">
    </body>
    </html>

    Test.java

    //显示等待
    WebDriverWait wait = new WebDriverWait(driver, 10);
    //获取网页标题
    wait.until(ExpectedConditions.titleContains("水果"));
    System.out.println("1.网页出现水果的标题");
            
    //获取下拉列表中的桃子选项
    WebElement selElement = driver.findElement(By.xpath("//option[@id='peach']"));
    wait.until(ExpectedConditions.elementToBeSelected(selElement));
    System.out.println("2.桃子处于选中状态");
            
            
    //判断单选框状态
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/input[1]")));
    System.out.println("3.页面单选框处于显示和可被单击状态");
            
    //判断p标签状态
    wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("/html/body/p")));
    System.out.println("4.页面的p元素已显示");
            
    //获取p标签对象
    WebElement pEle = driver.findElement(By.xpath("/html/body/p"));
    //判断p标签是否包含某些内容
    wait.until(ExpectedConditions.textToBePresentInElement(pEle, "喜欢的水果"));
    System.out.println("end");

    只有满足显式等待的条件满足,代码才会继续执行后续的测试逻辑

    如果超过设定的最大显式等待时间, 测试程序会抛出异常。

    隐式等待

    隐式等待是等待整个页面加载完成,针对的是整个页面。

    implicitlyWait方法设定查找页面元素的最大等待时间,当调用findElement方法没有找到定位的元素时,

    则程序每隔一段时间就会尝试再次寻找,若超过设定的最大时间,则将抛出NoSuchElementException异常

    //隐式等待
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    try {
        WebElement inputSearch = driver.findElement(By.id("kw"));
        inputSearch.sendKeys("hello");
    } catch (NoSuchElementException e){
        e.printStackTrace();
    }

    流畅等待

    FluentWait就是一个普通的类,我们使用这个类能支持一直等待直到特定的条件出现。

    1)是一个类而且是包org.openqa.selenium.support.ui的一部分

    2)是Wait接口的一种实现

    3)每个Fluent wait,我们可以设置等待最大时间,而且可以做设置等待的频率去检查一些特定的条件。

    流畅等待与显示等待的区别

    FluentWait 和 Explicit Wait的区别:简单来说就是Explicit Wait里有一些设定好了的前置条件的等待方式,而Fluent wait你可以设置自己的方法去处理各种等待的问题。

  • 相关阅读:
    Java反射实现几种方式
    kettle之几个.bat初步介绍
    eclipse 启动项目时候报的错误
    转:kettle中调度kitchen.bat后面接参数,写定时更新任务
    hibernate4,manytomany
    hibernate4,onetomany
    Javascript系列之在HTML中使用JavaScript
    Javascript系列之js简介
    004 C++ 指针
    003 C++ 函数
  • 原文地址:https://www.cnblogs.com/marton/p/11374333.html
Copyright © 2020-2023  润新知