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

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

目录

显示等待(Explicit Wait)

什么是显示等待?

如何实现显示等待?

显示等待条件

隐式等待(Implicit Wait)

什么是隐式等待?

如何实现隐式等待?

显示等待和隐式等待的区别

强制等待


在Selenium自动化测试中,等待是一个至关重要的概念。网页加载速度、元素的可见性以及元素的可交互性都是测试脚本成功执行的关键因素。Selenium提供了两种主要的等待方式,即"显示等待"和"隐式等待",用于处理这些情况。本文将深入探讨这两种等待方式的使用场景和实现方式,并结合Selenium 3和JUnit 5来说明。

显示等待(Explicit Wait)

什么是显示等待?

显示等待是一种在特定条件下等待某个元素出现或某个条件变为真的等待方式。这意味着你可以设置一个等待时间,只有在这个时间内特定条件满足时,测试脚本才会继续执行。这样可以确保在元素加载完成或者某个条件成立之后再进行后续的操作,从而提高测试的稳定性和可靠性。

如何实现显示等待?

在Selenium 3和JUnit 5中,我们可以使用WebDriverWait类来实现显示等待,如以下示例:

import org.junit.jupiter.api.Test;
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 ExplicitWaitExample {

    @Test
    public void explicitWaitExample() {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();

        // 打开网页
        driver.get("https://example.com");

        // 创建一个等待对象,设置等待时间为10秒
        WebDriverWait wait = new WebDriverWait(driver, 10);

        // 等待直到按钮可点击
        WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[text()='Click Me']")));

        // 点击按钮
        button.click();

        // 关闭浏览器
        driver.quit();
    }
}

上述代码中,我们首先设置了Chrome浏览器的驱动路径,并创建了一个WebDriver实例。然后,我们打开了网页,并使用WebDriverWait类来创建一个显示等待对象,并指定了最大等待时间为10秒。接下来,我们使用ExpectedConditions.elementToBeClickable条件来等待按钮出现并可点击。一旦按钮符合条件,就会执行后续的点击操作。

显示等待条件

1. elementToBeClickable 等待元素可点击,适用于需要点击某个元素的操作。

WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("elementId")));

 2. visibilityOfElementLocated 等待元素可见,适用于需要验证元素是否出现在页面上的操作。

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='example']")));

 3. textToBePresentInElement 等待文本出现在元素中,适用于需要验证元素是否包含特定文本的操作。

boolean textPresent = wait.until(ExpectedConditions.textToBePresentInElement(By.id("elementId"), "Expected Text"));

 4. presenceOfElementLocated 等待元素存在,不关心元素是否可见或可点击,只要元素在DOM中存在即可。

WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("elementId")));

5. frameToBeAvailableAndSwitchToIt 等待帧可用并切换到它,适用于需要在iframe中执行操作的情况。

wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frameId")));

 6. alertIsPresent 等待警告框出现,适用于需要处理JavaScript警告框的情况。

Alert alert = wait.until(ExpectedConditions.alertIsPresent());

这些等待条件使你能够根据需要等待元素的各种状态,以确保你的自动化测试脚本在执行操作之前等待正确的条件。根据具体的测试场景和需求,你可以选择适当的等待条件来提高测试的稳定性和可靠性。

隐式等待(Implicit Wait)

什么是隐式等待?

隐式等待是一种全局性的等待设置,它会在整个测试脚本的执行过程中生效。当你启用隐式等待后,Selenium会在查找元素时等待一段时间,如果元素在这个时间内找到了,就会立即执行后续操作,否则会抛出超时异常。这个等待时间是全局的,适用于所有的元素查找操作。

如何实现隐式等待?

在Selenium 3和JUnit 5中,你可以使用implicitlyWait方法来启用隐式等待。以下是一个示例:

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class ImplicitWaitExample {

    @Test
    public void implicitWaitExample() {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();

        // 设置全局的隐式等待时间为10秒
        driver.manage().timeouts().implicitlyWait(10, java.util.concurrent.TimeUnit.SECONDS);

        // 打开网页
        driver.get("https://example.com");

        // 查找元素,如果元素不在页面上立即找到,最多等待10秒
        WebElement element = driver.findElement(By.xpath("//input[@name='search']"));

        // 执行其他操作
        element.sendKeys("Selenium");

        // 关闭浏览器
        driver.quit();
    }
}

在上述代码中,我们首先设置了Chrome浏览器的驱动路径,并创建了一个WebDriver实例。然后,我们使用driver.manage().timeouts().implicitlyWait方法来设置全局的隐式等待时间为10秒。这意味着每次查找元素时,Selenium会等待最多10秒,如果元素在这个时间内找到了,就会继续
执行后续操作。


显示等待和隐式等待的区别

1. 用法和范围:

  • 隐式等待: 隐式等待是一种全局性的等待设置,适用于整个WebDriver实例的生命周期。一旦设置了隐式等待,它将在所有的元素查找操作上生效,除非被显式地覆盖或禁用。它不依赖于特定条件或元素,而只是设置了一个全局的最大等待时间,当查找元素时,如果元素没有立即找到,WebDriver会等待指定的时间。

  • 显示等待: 显示等待是一种更灵活的等待机制,它允许你根据特定的条件等待元素或条件满足后再执行后续操作。显示等待需要明确地定义等待条件和等待时间,并且仅在等待条件满足或超时后才继续执行操作。显示等待是针对特定的元素或条件,可以根据需要在不同的地方使用不同的等待条件和时间。

2. 超时处理:

  • 隐式等待: 隐式等待设置一个全局的超时时间,如果在该时间内找到了元素,就会立即执行后续操作。如果超过了超时时间而元素还未找到,WebDriver会抛出NoSuchElementException异常。

  • 显示等待: 显示等待允许你为每个等待条件设置不同的超时时间。这意味着你可以根据不同的情况和需求设置不同的等待时间,以确保测试脚本在特定条件满足后继续执行。

3. 等待条件:

  • 隐式等待: 隐式等待不依赖于特定的等待条件,它只是等待一段时间,无论元素是否可见、可交互或其他条件。

  • 显示等待: 显示等待允许你使用预定义的等待条件(例如visibilityOfElementLocatedelementToBeClickabletextToBePresentInElement等)或自定义的等待条件,以满足特定的测试需求。你可以根据需要选择适当的条件。

综上所述,显示等待提供了更大的灵活性和控制,因为它允许你为不同的元素或情况设置不同的等待条件和超时时间。隐式等待则是一种全局设置,适用于整个WebDriver实例,对于整体性能有较好的控制,但缺乏灵活性,可能会导致不必要的等待时间或等待时间过短。在实际测试中,通常建议优先使用显示等待,根据需要进行精确的等待条件配置,以提高测试的稳定性和可维护性~~😁

强制等待

强制等待是一种等待方式,它不依赖于特定条件或元素的可见性或可点击性。相反,它是在测试脚本中添加一个明确的等待时间,无论条件是否满足,都会等待指定的时间。虽然强制等待不是推荐的等待策略,因为它不够灵活,但在某些情况下仍然有用,例如等待网页加载或执行复杂的JavaScript操作后。

在Selenium中,我们可以使用Thread.sleep方法来实现强制等待。这个方法会导致当前线程暂停执行指定的时间,单位是毫秒。

import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ExplicitWaitExample {

    @Test
    public void forceWaitExample() throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();

        // 打开网页
        driver.get("https://example.com");

        // 执行一些操作...

        // 强制等待5秒钟
        Thread.sleep(5000);

        // 执行其他操作...

        // 关闭浏览器
        driver.quit();
    }
}

在上述代码中,我们使用Thread.sleep方法来强制等待5秒钟。请注意,这会导致测试脚本暂停执行,无论页面是否已经加载完毕或其他条件是否满足。因此,强制等待可能会导致测试脚本变得不稳定,因为它不会等待元素的可见性或可交互性。

总结:

在Selenium自动化测试中,等待是一个至关重要的概念,用于处理页面加载、元素可见性和可交互性等情况。两种主要的等待方式是隐式等待(Implicit Wait)和显示等待(Explicit Wait),它们在用法和行为上有一些关键区别。

隐式等待 是一种全局性的等待设置,它适用于整个WebDriver实例的生命周期。它会设置一个全局的最大等待时间,当查找元素时,如果元素没有立即找到,WebDriver会等待指定的时间,然后继续执行后续操作。隐式等待不依赖于特定条件或元素,而只是在元素查找时等待一段时间。

显示等待 是一种更灵活的等待机制,它允许你根据特定的条件等待元素或条件满足后再执行后续操作。显示等待需要明确地定义等待条件和等待时间,并且仅在等待条件满足或超时后才继续执行操作。显示等待是针对特定的元素或条件,可以根据需要在不同的地方使用不同的等待条件和时间。文章来源地址https://www.toymoban.com/news/detail-696933.html

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

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

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

相关文章

  • Selenium中的隐式等待和显式等待

    在Selenium中,“等待”在执行测试中起着重要作用。在本文中,您将学习Selenium中“隐式”和“显式”等待的各个方面。 在本文中,您将学习到 1. 为什么我们需要在selenium中等待? 2. 隐瞒等待 3. 明确等待 4. 流利的等待 为什么我们需要在Selenium中等待? 大多数Web应用程序都

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

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

    2024年01月17日
    浏览(32)
  • Selenium自动化测试:详解显示等待和条件类

    了解Selenium中的显示等待和条件类,以确保UI自动化测试用例的稳定性。掌握各种等待条件,如元素出现、可见、可点击等,以及实现原理。

    2024年02月03日
    浏览(29)
  • Selenium常用操作之单选复选框、下拉列表、键盘、截屏、断言、(显式隐式)等待

    目录 1. 窗口最大化 2.单选框操作 3. 复选框操作 4. 下拉列表 5. selenium 三种等待 6. 键盘操作 7.截屏 8.断言 9. Selenium操作JS弹窗控件 10.鼠标悬停与释放 (1) 强制等待    常用于调试 (2) 隐式等待   简介:      a 、 driver.implicitly_wait(10),隐式等待设置了一个时间,在一段时

    2024年02月03日
    浏览(51)
  • 学习selenium+python使用 XPath 表达式来实现找到目标元素时智能封装等待,执行测试代码启动Chrome浏览器后,地址栏只显示data;

    学习使用 XPath 表达式来实现找到目标元素时智能封装等待 执行测试代码启动Chrome浏览器后,地址栏只显示 data; 看了好久找到了替代启动浏览器的方法:换成 self.driver.get(\\\'http://localhost:8080\\\') 就好了 然后开始琢磨两者的区别: 使用 self.driver.get(\\\'http://localhost:8080\\\') 时,driver 是

    2024年01月17日
    浏览(34)
  • selenium之显示等待(等到某个元素出现后再继续执行)

    本文章还请认真仔细阅读,非常简单,阅读前,你可能已经掌握,xpath 我们在爬虫的时候,总会利用time.sleep(),去等待元素的出现,但是这很容易出错,因为你不知道你的网速有多卡😂,从而导致频繁报错 我相信我的注释已经很 【言简意赅】了,你一定可以看得懂 我用了一

    2024年02月12日
    浏览(29)
  • Java Selenium中的等待和超时

    在执行 selenium 自动化测试时,我们使用等待来使我们的测试可靠且健壮。最常见的是,在运行自动化测试时,如果在加载 Webdriver 想要交互的特定元素时出现延迟,我们会看到“ElementNotVisibleException”。 等待和超时可帮助用户在执行某些操作或在应用程序中的不同页面之间导

    2024年02月03日
    浏览(21)
  • webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行。我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶

    2024年02月13日
    浏览(28)
  • 自动化测试系列-Selenium三种等待详解

    第一种也是最简单粗暴的一种办法就是强制等待sleep(time),强制让程序等time秒时间,不管程序能不能跟上速度,还是已经提前到了,都必须等time时长。 如下代码案例所示: 这种叫强制等待,不管你浏览器是否加载完了,程序都得等待5秒,5秒一到,继续执行下面的代码,作为

    2024年04月10日
    浏览(57)
  • Selenium+JUnit的自动化测试报告

    文章摘要:         本文记录了作者本人的交流论坛项目的自动化测试报告具体内容。其中其中包括了对项目测试用例的设计、测试工具的选择、测试环境的准备部署和项目测试的代码设计。较为完整的展现了自动化测试的全过程。           在测试之前,首先要做的工作

    2024年02月04日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包