如何在Selenium中等待页面加载?三种实现方式介绍

2021年11月10日17:01:00 发表评论 1,443 次浏览

Selenium 已被证明是一个很好的自动化测试框架。自动化测试加快了整个测试过程。尽管在测试应用程序时速度是一件好事,但有时你必须放慢速度并等待。速度和减速是矛盾的,但如果你想要质量和准确性,在需要的时候等待是可以的。

你困惑吗?我说的是 Selenium 中“等待”的概念。由于如今大多数 Web 应用程序都是动态的,你必须在运行测试之前使用等待以确保获得准确的结果。如何在Selenium中等待页面加载?在这篇文章中,我将讨论 Selenium 等待是什么。然后我将解释不同类型的等待以及如何使用它们。最后,我会告诉你如何使用Testim使这个过程变得容易。

Selenium 中的等待是什么?

Selenium提供了许多功能和方法,以确保你获得测试应用程序所需的一切。今天的每个开发人员都希望他们的应用程序具有高质量。为了提高质量并使应用程序具有吸引力,使用了许多复杂的元素。此外,许多网站会显示特定于用户的数据。这意味着网站上的信息是动态的,而不是静态的。

总而言之,Web 应用程序越来越复杂且用户特定。要测试此类应用程序并获得有关应用程序行为的准确结果,请务必等待元素加载完毕。这就是你使用等待的原因。

Selenium 等待用于暂停代码的执行一段时间。这样做是为了等待应用程序的元素加载,以便可以对它们执行操作。

接下来,我将告诉你不同类型的等待以及如何在 Python 中实现它们。

Selenium 中的等待类型

Selenium 有三种主要的等待类型:

  1. 隐式等待
  2. 显式等待
  3. 流畅的等待

隐式等待

Selenium等待页面加载示例:隐式等待是告诉 Selenium 等待的一种直接方式。如果你正在测试需要时间加载某些元素的应用程序,你可以使用隐式等待。当你了解元素加载所需的大致时间时,隐式等待很有用。

Selenium如何等待页面加载?考虑一个示例,你正在测试一个需要 10 秒才能加载元素的应用程序。在这种情况下,你知道必须让代码等待至少十秒钟。在你知道必须等待元素的特定时间量的情况下,你可以使用隐式等待。

Python代码

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.example.com") #This is a dummy website URL
driver.implicitly_wait(10)
elem = driver.find_element_by_name("Element_to_be_found") #This is a dummy element

我在上面的代码中使用了一个虚拟的网站 URL 和一个虚拟的元素名称。你显然可以将其替换为实际的网站 URL 和元素名称。上面的代码将加载一个网站,然后等待十秒钟。之后,它将通过 ID 搜索特定元素。

显式等待

Selenium等待页面加载示例:显式等待是隐式等待的高级形式。但是,当你使用显式等待时,你指定了代码应该等待的条件。

如何在Selenium中等待页面加载?考虑一个示例,你正在测试显示警告框的应用程序。该应用程序的设计方式是,当你在文本框中输入一些文本并单击提交按钮时,会显示提示或警报框。显示警报所需的时间取决于不同的因素,例如用户输入、服务器响应时间、网络等。

如果你知道必须等待显示警告框,但不知道显示警告框需要多长时间,则可以使用显式等待

Python代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://www.example.com") #This is a dummy website URL
try:
    elem = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "Element_to_be_found")) #This is a dummy element
    )
finally:
    driver.quit()

Selenium如何等待页面加载?上面会打开一个网站,然后等待十秒钟。如果代码在十秒内找到该元素,则创建一个对象。如果未找到该元素,则会引发异常。

显式等待不能用于所有目的。你可以使用显式等待的一些情况是:

  • visibility_of
  • frame_to_be_available_and_switch_to_it
  • element_to_be_clickable
  • staleness_of
  • element_to_be_selected
  • element_selection_state_to_be
  • alert_is_present

流畅的等待

你可以将流畅等待视为显式等待的高级版本。使用流畅的等待,你可以定义条件。你还可以定义检查指定条件的频率。

考虑一个示例,你正在测试你知道元素正在动态加载的应用程序。你知道一个元素最多需要 50 秒才能加载。但是元素可以在零到五十秒之间的任何时间加载。

在这种情况下,定期检查元素比等待 50 秒更有效。在这种情况下,你可以使用流畅等待。

Python 没有用于流畅等待的内置方法。但是你可以将各种参数传递给WebDriverWait 方法来实现流畅的等待。

Selenium等待页面加载示例:Python代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import *

driver = webdriver.Firefox()
driver.get("http://www.example.com") #This is a dummy website URL
wait = WebDriverWait(driver, 10, poll_frequency=1, ignored_exceptions=[ElementNotVisibleException, ElementNotSelectableException])
elem = wait.until(EC.element_to_be_clickable((By.XPATH, "//div")))

此代码的主要部分类似于用于显式等待的示例。我们需要关注的部分是这条线

wait = WebDriverWait(driver, 10, poll_frequency=1, ignored_exceptions=[ElementNotVisibleException, ElementNotSelectableException])

在这里,我们像往常一样设置等待时间。但我们必须到新的领域。第一个是 poll_frequency,它用于指定检查特定条件的频率(在下一行中提到)。第二个字段ignore_exceptions用于提及要忽略的异常。因为可以在 0 到 50 秒之间的任何时间找到该元素,所以在找到该元素之前会发生一些异常。我们可以在此处添加那些在未找到元素时代码将遇到的异常。

上面的代码将打开一个网站并等待十秒钟才抛出异常。代码将以一秒的频率检查元素。

使用 Selenium 等待的挑战在于选择最适合你的用例的等待类型。你可以通过使用自动测试工具来避免这一挑战,该工具可以内置等待以匹配元素。让我们来看看如何做到这一点。

使用 Testim 使等待变得容易

如何在Selenium中等待页面加载?Testim 是“记录和回放测试”类别中的自动化测试工具。要使用 Testim 进行应用程序测试,你需要有一个帐户。你可以创建一个免费帐户或在此处登录。

Selenium等待页面加载示例:登录后,转到仪表板并单击“创建测试”按钮,然后单击记录图标。

如何在Selenium中等待页面加载?三种实现方式介绍

现在,你必须输入要测试的网站的 URL。然后你将看到另一个浏览器窗口打开,你可以在其中执行测试。我将在 Google 搜索引擎上执行一个简单的测试。

Selenium如何等待页面加载:我创建了一个测试,我在 Google 搜索引擎上搜索 Testim 工具。然后我将点击链接打开 Testim 网站。在浏览器上执行测试后,记录动作后,在可视化编辑器中记录的测试步骤如截图所示:

如何在Selenium中等待页面加载?三种实现方式介绍
Selenium等待页面加载示例

要添加等待,你只需将鼠标悬停在要添加等待的操作之后。你会看到一个“+”号。点击它。

如何在Selenium中等待页面加载?三种实现方式介绍

现在你会看到一个菜单。向下滚动以找到“等待元素可见”选项并单击它。

如何在Selenium中等待页面加载?三种实现方式介绍

就这么简单。下次运行测试时,它将在执行操作之前等待元素可见。可以以类似的方式添加额外的等待,以提供更大的灵活性来处理当今的动态 Web 应用程序。

Selenium等待页面加载示例总结

如何在Selenium中等待页面加载?现在你明白了在测试动态应用程序时,使用等待来获得准确的结果很重要。虽然 Selenium 可以帮助你做到这一点,但你可以使用 Testim 等自动化测试工具更轻松地做到这一点。等待元素可见只是 Testim 如何轻松添加等待的一个简单示例。要了解更多 Testim 提供的等待选项,请查看文档,或获取免费帐户并探索该工具。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: