在 Web 自动化测试领域,Selenium 是一个广泛使用的工具,而其中的 expected_conditions
模块更是为测试过程带来了极大的便利。**特别是遇到网站结构复杂、网络加载慢或异常、主机资源紧张以及一些其他的意外场景,使用预期条件,判断自动化测试动作是否符合预期,显得尤为重要。**接下来的内容是基于selenium版本4.30.0。
一、模块概述
expected_conditions
模块定义了一系列用于等待特定条件满足的函数。在 Web 自动化测试中,页面加载、元素出现和状态变化等操作往往不是瞬间完成的,需要适当的等待机制,以确保测试的稳定性和准确性。这些函数就是为此而生,它们能够让测试脚本在特定条件达成后再继续执行,避免因页面未准备好而导致的测试失败。
二、核心函数介绍
(一)页面标题相关
1.title_is(title: str) -> Callable[[WebDriver], bool]
确保当前页面的标题与预期标题一致,常用于验证页面跳转是否正确。例如,当用户登录后,期望跳转到的用户个人信息页面有特定标题,就可以用此函数进行验证。
2.title_contains(title: str) -> Callable[[WebDriver], bool]
**
**相比于精确匹配标题,此函数更灵活,可用于确认页面标题中是否包含关键信息片段。例如,在多语言网站中,标题可能有多种语言版本,但都包含某个核心词汇,就可通过这种方式验证。
(二)元素存在与可见性相关
1.presence_of_element_located(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], WebElement]
在执行某些操作前,确认目标元素在页面结构中已加载。例如,在填写表单前,确保表单元素已存在于页面。
2.visibility_of_element_located(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]
当需要与页面上实际可见的元素进行交互时,此函数非常有用。例如,点击一个按钮前,确保按钮可见且可操作。
3.visibility_of(element: WebElement) -> Callable[[Any], Union[Literal[False], WebElement]]
在已经获取到元素对象的情况下,进一步确认该元素是否可见,以便进行后续操作。例如,在一组元素中,筛选出可见的元素进行处理。
(三)URL 相关
1.url_contains(url: str) -> Callable[[WebDriver], bool]
用于验证页面跳转后的 URL 是否包含特定的参数或路径信息。例如,在用户点击某个链接后,检查新页面的 URL 是否包含与该链接相关的标识。
2.url_matches(pattern: str) -> Callable[[WebDriver], bool]
适用于需要对 URL 进行更复杂匹配的场景,例如验证 URL 的格式或特定部分的内容。
(四)元素文本与属性相关
1.text_to_be_present_in_element(locator: Tuple[str, str], text_: str) -> Callable[[WebDriverOrWebElement], bool]
常用于验证页面元素上显示的文本是否符合预期。例如,验证商品详情页中商品描述是否包含特定关键词。
2.text_to_be_present_in_element_value(locator: Tuple[str, str], text_: str) -> Callable[[WebDriverOrWebElement], bool]
对于表单元素等有 value
属性的元素,验证其值是否符合预期。例如,验证输入框在输入内容后,其 value
属性是否正确更新。
(五)框架相关
1. frame_to_be_available_and_switch_to_it(locator: Union[Tuple[str, str], str, WebElement]) -> Callable[[WebDriver], bool]
当页面中存在框架结构,且需要操作框架内的元素时,首先要确保框架可用并切换到该框架。例如,在包含广告框架和主内容框架的页面中,操作主内容框架内的元素前,需切换到主内容框架。
(六)元素状态相关
1.element_to_be_clickable(mark: Union[WebElement, Tuple[str, str]]) -> Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]
确保在点击元素时,元素处于可操作状态,避免因元素不可见或未启用而导致的点击失败。例如,在提交表单前,确保提交按钮可点击。
2.staleness_of(element: WebElement) -> Callable[[Any], bool]
用于验证某个操作后,特定元素是否已从页面中移除或更新。例如,在删除一条记录后,验证该记录对应的元素是否已失效。
(七)组合条件函数
1.any_of(*expected_conditions: Callable[[D], T]) -> Callable[[D], Union[Literal[False], T]]
当有多个可能的条件需要满足,但不确定具体哪个条件会先达成时,使用此函数。例如,在等待页面加载完成时,可能存在多个元素加载完成都意味着页面加载成功,此时可以将这些元素的存在或可见条件组合起来。
2.all_of(*expected_conditions: Callable[[D], Union[T, Literal[False]]]) -> Callable[[D], Union[List[T], Literal[False]]]
当有多个可能的条件需要满足,需要同时满足这些条件时,使用此函数。
3.none_of(*expected_conditions: Callable[[D], Any]) -> Callable[[D], bool]
检查多个预期条件是否全部为假
三、使用案例
python
WebDriverWait(driver, 60).
until(EC.presence_of_element_located(
(By.XPATH, '//*@id="root"]/div/div/div[3]/div[1]/div[2]/div/div[1]/div[3]'))
)
四、相关推荐
如何准确定位元素:Selenium Web自动化如何快速又准确的定位元素路径,强调一遍是元素路径-CSDN博客
ChromeDriver及浏览器下载:最全ChromeDriver及谷歌浏览器下载含win linux mac 最新稳定版本135.0.7049.4265 持续更新..._chromedriver 134-CSDN博客
Selenium模拟移动设备:Selenium 模拟不同型号设备访问-CSDN博客