Selenium 中 expected_conditions 模块详解:提升 Web 自动化测试效率的得力助手

在 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, UnionT, Literal\[False]]) -> Callable\[D, UnionList\[T, LiteralFalse]]

当有多个可能的条件需要满足,需要同时满足这些条件时,使用此函数。

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博客

相关推荐
Meta Luo4 小时前
页面改版后自动化用例大量失败,应该怎么维护?
运维·功能测试·测试工具·自动化
释槐鸟~14 小时前
还不知道RIDE工具怎么装吗
测试工具·自动化
有技巧搬砖1 天前
为什么锂电池组的电池老化测试很重要?
测试工具·锂电池·电池老化
蒲公英内测分发1 天前
智能手表卖出去后,包装、说明书和官网里的 App 下载入口怎么统一?
前端·人工智能·测试工具·智能家居·智能硬件·智能手表
蒲公英内测分发2 天前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
无语的小歪歪2 天前
ATF 智测 1.0
python·测试工具·集成测试
SHENGWEI胜为2 天前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
xie881018022 天前
长表格跨页重复表头:排版上的做法
测试工具
老孟说禅3 天前
测试工具示波器的使用
测试工具
步行cgn3 天前
为什么使用接口测试工具?
测试工具