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

相关推荐
cuijiecheng20184 小时前
音视频入门基础:MPEG2-PS专题(8)——使用Wireshark分析GB28181的PS流
测试工具·wireshark·音视频
Tipriest_8 小时前
【前端扫盲】postman介绍及使用
前端·测试工具·postman
niuniu_6662 天前
简单的自动化场景(以 Chrome 浏览器 为例)
运维·chrome·python·selenium·测试工具·自动化·安全性测试
suimeng62 天前
ChromeDriver的常用方法
java·selenium
niuniu_6662 天前
Selenium 性能测试指南
selenium·测试工具·单元测试·测试·安全性测试
莓事哒2 天前
selenium和pytessarct提取古诗文网的验证码(python爬虫)
爬虫·python·selenium·测试工具·pycharm
suimeng62 天前
基本元素定位(findElement方法)
java·selenium
mywpython3 天前
mac 最新的chrome版本配置selenium的方式
chrome·python·selenium·macos
软件测试曦曦3 天前
如何使用Python自动化测试工具Selenium进行网页自动化?
自动化测试·软件测试·python·功能测试·测试工具·程序人生·自动化