Selenium 已被证明是一个很好的自动化测试框架。自动化测试加快了整个测试过程。尽管在测试应用程序时速度是一件好事,但有时你必须放慢速度并等待。速度和减速是矛盾的,但如果你想要质量和准确性,在需要的时候等待是可以的。
你困惑吗?我说的是 Selenium 中“等待”的概念。由于如今大多数 Web 应用程序都是动态的,你必须在运行测试之前使用等待以确保获得准确的结果。如何在Selenium中等待页面加载?在这篇文章中,我将讨论 Selenium 等待是什么。然后我将解释不同类型的等待以及如何使用它们。最后,我会告诉你如何使用Testim使这个过程变得容易。
Selenium 中的等待是什么?
Selenium提供了许多功能和方法,以确保你获得测试应用程序所需的一切。今天的每个开发人员都希望他们的应用程序具有高质量。为了提高质量并使应用程序具有吸引力,使用了许多复杂的元素。此外,许多网站会显示特定于用户的数据。这意味着网站上的信息是动态的,而不是静态的。
总而言之,Web 应用程序越来越复杂且用户特定。要测试此类应用程序并获得有关应用程序行为的准确结果,请务必等待元素加载完毕。这就是你使用等待的原因。
Selenium 等待用于暂停代码的执行一段时间。这样做是为了等待应用程序的元素加载,以便可以对它们执行操作。
接下来,我将告诉你不同类型的等待以及如何在 Python 中实现它们。
Selenium 中的等待类型
Selenium 有三种主要的等待类型:
- 隐式等待
- 显式等待
- 流畅的等待
隐式等待
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等待页面加载示例:登录后,转到仪表板并单击“创建测试”按钮,然后单击记录图标。
现在,你必须输入要测试的网站的 URL。然后你将看到另一个浏览器窗口打开,你可以在其中执行测试。我将在 Google 搜索引擎上执行一个简单的测试。
Selenium如何等待页面加载:我创建了一个测试,我在 Google 搜索引擎上搜索 Testim 工具。然后我将点击链接打开 Testim 网站。在浏览器上执行测试后,记录动作后,在可视化编辑器中记录的测试步骤如截图所示:
要添加等待,你只需将鼠标悬停在要添加等待的操作之后。你会看到一个“+”号。点击它。
现在你会看到一个菜单。向下滚动以找到“等待元素可见”选项并单击它。
就这么简单。下次运行测试时,它将在执行操作之前等待元素可见。可以以类似的方式添加额外的等待,以提供更大的灵活性来处理当今的动态 Web 应用程序。
Selenium等待页面加载示例总结
如何在Selenium中等待页面加载?现在你明白了在测试动态应用程序时,使用等待来获得准确的结果很重要。虽然 Selenium 可以帮助你做到这一点,但你可以使用 Testim 等自动化测试工具更轻松地做到这一点。等待元素可见只是 Testim 如何轻松添加等待的一个简单示例。要了解更多 Testim 提供的等待选项,请查看文档,或获取免费帐户并探索该工具。