五、Selenium 三种等待方式:强制等待、隐式等待、显示等待

这篇具有很好参考价值的文章主要介绍了五、Selenium 三种等待方式:强制等待、隐式等待、显示等待。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、强制等待

名词解释:强制线程休眠一定时间,适合脚本调试时使用。

常用方法:Thread.sleep(long millis);

  • 优点:适合脚本调试时使用;
  • 缺点:不能准确把握需要等待的时间,如果用例中大量使用,会浪费不必要的等待时间,影响用例的执行效率;
    • 操作未完成,等待结束,导致系统报错;
    • 操作完成,时间未到,导致浪费时间;

二、隐式等待

名词解释:设置一个最长等待时间,轮询查看页面是否加载完成(默认 0.5 秒),如果超过最长等待时间页面未加载完成则抛出异常。

常用方法:driver.manage().timeouts().implicitlyWait(Duration duration);

  • 优点:隐式等待对整个 WebDriver 生命周期都起作用,在开始时设置一次即可。
  • 缺点:使用隐式等待,程序会一直等待页面加载完成,才会执行下一步操作(有时候页面想要的元素早已加载完成了,但是页面上个别元素还没有加载完成,仍要等待页面全部加载完成才能执行下一步,使用也不是很灵活)

三、显示等待

名词解释:定义等待条件,当条件发生时才执行后续代码。程序会轮询查看条件是否发生(默认 0.5 秒),如果条件成立则执行下一步,否则继续等待,直到超过设置的最长时间,程序抛出异常。
五、Selenium 三种等待方式:强制等待、隐式等待、显示等待
Wait 接口有两个实现类:WebDriverWait 和 FluentWait

常用方法1:FluentWait 流畅等待

源码解释:

  • Wait 接口的一个实现,可以动态配置它的超时和轮询间隔。
  • 每个 FluentWait 实例定义等待条件的最长时间,以及检查条件的频率。
  • 可配置等待时忽略特定类型的异常,例如在页面上搜索元素时的NoSuchElementExceptions。
  • 线程不安全

示例用法:等待一个元素出现在页面上 30 秒,每 5 秒检查一次它的存在。

	Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
         .withTimeout(Duration.ofSeconds(30L))
         .pollingEvery(Duration.ofSeconds(5L))
         .ignoring(NoSuchElementException.class);
  
     WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
       public WebElement apply(WebDriver driver) {
         return driver.findElement(By.id("foo"));
       }
     });

示例用法:登录测试人网站

package com.sunskblue.selenium.waitTest;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.*;

import java.time.Duration;
import java.util.function.Function;

public class LoginTest {

    public static WebDriver driver;

    @BeforeAll
    public static void SetUp() {
        driver = new ChromeDriver();
    }

    @Test
    public void LoginTest() throws InterruptedException {
        driver.get("https://ceshiren.com/");
		// 显示等待核心逻辑
        FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                .withTimeout(Duration.ofSeconds(30))
                .pollingEvery(Duration.ofSeconds(5))
                .ignoring(NoSuchElementException.class);
		// 显示等待核心逻辑
        WebElement loginElement = wait.until(new ExpectedCondition<WebElement>() {
            @Override
            public WebElement apply(WebDriver webDriver) {
                return driver.findElement(By.xpath("//span[contains(text(),'登录')]"));
            }
        });
        
        loginElement.click();
        driver.findElement(By.id("login-account-name")).clear();
        driver.findElement(By.id("login-account-name")).sendKeys("961370624@qq.com");
        driver.findElement(By.id("login-account-password")).clear();
        driver.findElement(By.id("login-account-password")).sendKeys("*******");
        driver.findElement(By.id("login-button")).click();
    }

    @AfterAll
    public static void TearDown() {
        driver.quit();
    }
}

常用方法2:WebDriverwait

  • WebDriverWait 继承了 FluentWait,可以使用 FluentWait 中的特性;
  • WebDriverWait 中有两个有参构造器,都调用了本类中的一个全参构造器
  • 全参构造器中使用了 ignoring(NotFountException.class) 方法,使得 WebDriverWait 等待时自动忽略NotFountException;
    五、Selenium 三种等待方式:强制等待、隐式等待、显示等待

第一个参数: WebDriver 对象
第二个参数:最长等待时间
第三个参数:轮询时间

优点:等待判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率。
缺点:
1、使用相对比较复杂;
2、和强制等待类似,每一行等待只执行一次,如果要进行多个元素的等待,则需要多次写入。

示例用法:等待一个元素出现在页面上 30 秒

package com.sunskblue.selenium.waitTest;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

/**
 * 显示等待
 */
public class DisplayWaitTest {
    public static WebDriver driver;

    @BeforeAll
    public static void SetUp() {
        driver = new ChromeDriver();
    }

    @Test
    public void LoginTest() throws InterruptedException {

        driver.get("https://ceshiren.com/");
		// 核心逻辑
        WebElement loginElement = new WebDriverWait(driver, Duration.ofSeconds(30)).until(
                new ExpectedCondition<WebElement>() {
                    @Override
                    public WebElement apply(WebDriver webDriver) {
                        return webDriver.findElement(By.xpath("//span[contains(text(),'登录')]"));
                    }
                });
        loginElement.click();

        driver.findElement(By.id("login-account-name")).clear();
        driver.findElement(By.id("login-account-name")).sendKeys("961370624@qq.com");
        driver.findElement(By.id("login-account-password")).clear();
        driver.findElement(By.id("login-account-password")).sendKeys("********");
        driver.findElement(By.id("login-button")).click();
    }

    @AfterAll
    public static void TearDown() {
        driver.quit();
    }
}

四、ExpectedCondition 模块常用方法

https://blog.csdn.net/zyooooxie/article/details/84561783

五、隐式等待和显示等待公用优先级

Selenium官网明确说明说两者不建议一同使用;
共用时,两种等待取决于谁的时间更长;文章来源地址https://www.toymoban.com/news/detail-401822.html

到了这里,关于五、Selenium 三种等待方式:强制等待、隐式等待、显示等待的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium 3和JUnit 5中的显示等待与隐式等待

    目录 显示等待(Explicit Wait) 什么是显示等待? 如何实现显示等待? 显示等待条件 隐式等待(Implicit Wait) 什么是隐式等待? 如何实现隐式等待? 显示等待和隐式等待的区别 强制等待 在Selenium自动化测试中,等待是一个至关重要的概念。网页加载速度、元素的可见性以及

    2024年02月09日
    浏览(38)
  • web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天

    获取到的断言信息就是实际结果 预期结果使我们确定的,直接写在代码中的 而实际结果是无法确定的,所以需要用一些方法去获取 代码示例 场景:当我们加载页面的时候,一些元素是需要时间的 就有可能发生,代码执行到了,而元素没有被加载出来 此时就会出现找不到元

    2024年01月17日
    浏览(45)
  • Web自动化测试进阶:网页中难点之等待机制 —— 强制等待,隐式等待

    为什么要添加等待 避免页面未渲染完成后操作,导致的报错 经常会遇到报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {\\\"method\\\":\\\"xpath\\\",\\\"selector\\\":\\\"//*[text()=\\\'个人中心\\\']\\\"} 页面还在加载时,就在进行查收元素,此时元素还没显示加载出来,而报

    2024年02月05日
    浏览(73)
  • 【selenium】三种等待方式

    time模块中的sleep()方法,程序执行到此代码时强制等待一段时间。 time.sleep(time),传入具体的等待时间time 可以控制等待的具体时间,一般在调试代码时使用 无法准确把握需要等待的时间 如果设置时间过短,操作还未完成,等待时间已到,会导致测试用例执行报错,影响测试

    2024年02月03日
    浏览(41)
  • Selenium:三种等待方式

    目录 一、显示等待 二、隐式等待 三、强制等待 UI自动化测试,大多都是通过定位页面元素来模拟实际的生产场景操作。但在编写自动化测试脚本中,经常出现元素定位不到的情况,究其原因,无非两种情况:1、有frame;2、没有设置等待。 因为代码运行速度和浏览器加载渲

    2024年02月03日
    浏览(47)
  • selenium之三种等待方式

    1:强制等待 无条件等待,必须等待设置的时间后,再执行 使用方法:导入time库,time.sleep(sec)      sec表示多少秒,sec设置多少秒页面就会等待多少秒(死等),时间一到,继续执行下面的代码。在调试的时候很有用,但这个方法很容易让线程挂掉,使程序抛异常。 例:使

    2024年02月08日
    浏览(42)
  • selenium的三种等待方式

    设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点:不智能,使用太多的sleep会影响脚本运行速度。 使用方法:time.sleep(delay) 使用举例:打开百度,强制等待5秒 (无条件等待,在一个时间段内等待) 一次设置,全局生效。 不要当作固定等待

    2023年04月13日
    浏览(49)
  • Appium/Selenium+Java的三种等待方式

    参考: java-selenium三种等待方式 Selenium+Java(六)Selenium 强制等待、显式等待、隐实等待 强制等待是利用time模块的sleep方法来实现,最简单粗暴的等待方法。 缺点:不能准确把握需要等待的时间(有时候操作未完成,等待就结束了,导致报错;有时候操作已经完成了,但时间

    2024年02月05日
    浏览(62)
  • python自动化测试selenium核心技术三种等待方式

    UI自动化测试过程中,可能会出现因测试环境不稳定、网络慢等情况,如果不做任何处理的话,会出现无法定位到特定元素而报错,导致自动化测试无法顺利执行。 selenium官网手册:Waits | Selenium slenium自动化测试中,主要涉及三种等待方式:     缺点:即使网络条件较好时

    2024年04月11日
    浏览(61)
  • selenium中三种等待方式:sleep,implicitly_wait,WebDriverWait

    强制等待, sleep,设置等待多长时间,就要等待多长时间。等待完成后,才会继续下一步: 相比较于sleep的强制等待,selenium中还有种等待,可以称之为智能等待:implicitly_wait。所谓智能等待,就是在我设置的等待时间范围内,只要满足了我的条件,就会立即结束等待,继续

    2024年02月16日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包