软件测试笔记【Web自动化测试篇】:python实现,教学必备
Web自动化测试从零到一:Selenium元素定位、等待机制、鼠标键盘操作全攻略
手工点点点效率太低?回归测试每次都要重复执行?Web自动化测试正是解决这些痛点的利器。本文带你系统掌握Selenium WebDriver的核心知识:浏览器启动、8大元素定位、隐式/显式等待、表单/鼠标/键盘操作、JavaScript执行等
目录
Web自动化测试从零到一:Selenium元素定位、等待机制、鼠标键盘操作全攻略
1. ⭐ 写在前头,行业趋势
Playwright(微软出品)
2. 🌐 Web自动化测试概述
常用工具
3. 🧩 Selenium WebDriver基础
引入Selenium(Python示例)
4. 🎯 元素定位方法(返回 WebElement 对象)
5. ⏱️ 元素等待机制
隐式等待
显式等待
常用等待条件
6. 🖥️ 浏览器操作
窗口管理
页面滚动(执行JavaScript)
浏览器导航
表单操作
下拉菜单处理(Select类)
键盘操作(Keys类)
鼠标操作(ActionChains类)
元素状态判断
7. ⚡ 执行JavaScript
弹窗处理
8. 📖 总结与实践
🔮 系列内容
✨ 写在最后
1. ⭐ 写在前头,行业趋势
虽然Selenium是现在主流必学,但2026年的行业现状——Playwright的采用率已经超过了Selenium,加上AI辅助测试五花八门,让基础薄弱的可以快速上手。
Playwright(微软出品)
无需手动配置驱动 自带浏览器驱动,不用再管 ChromeDriver、GeckoDriver 自动智能等待 自动处理异步加载、弹窗、iframe,无需写 WebDriverWait执行更快 速度比 Selenium 快 3~5 倍,稳定性更高 多场景开箱即用 多标签、多浏览器、移动端模拟、视频录制、网络拦截一键搞定 对前端 JS 更友好 原生支持 page.evaluate()执行复杂 JS,可直接监听网络、控制浏览器底层行为,语法更贴近前端开发习惯
2. 🌐 Web自动化测试概述
Web自动化测试 是通过模拟用户操作对Web应用程序进行自动化验证的过程,主要目的:提高测试效率、保证回归测试质量。
常用工具(官网链接)
Selenium(目前最常见的开源Web自动化测试框架)
Cypress
Playwright (全栈轻量级开发新星)
3. 🧩 Selenium WebDriver基础
WebDriver架构
通过浏览器驱动与不同浏览器进行通信,支持 Chrome、Firefox、Edge 等主流浏览器。
浏览器启动与管理
通过WebDriver类启动和管理浏览器会话,可设置浏览器窗口大小、位置等参数。
页面导航
get()方法打开指定 URLforward()、back()、refresh()方法实现页面前进、后退和刷新
引入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.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import Select4. 🎯 元素定位方法(返回 WebElement 对象)
Selenium 提供8种基本元素定位方式,通过By类实现:
driver = webdriver.Chrome() driver.find_element(By.ID, "id值") # id定位 driver.find_element(By.NAME, "name值") # name定位 driver.find_element(By.CLASS_NAME, "class值") # class值定位 driver.find_element(By.CSS_SELECTOR, "css选择器") # css选择器定位 driver.find_element(By.TAG_NAME, "标签名") # 标签名定位 driver.find_element(By.LINK_TEXT, "链接文本") # 链接文本定位 driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本") # 部分链接文本定位 driver.find_element(By.XPATH, "xpath表达式") # [XPath]定位💡提示:优先使用 ID、NAME 等稳定属性,XPATH灵活但维护成本较高。
5. ⏱️ 元素等待机制
隐式等待
设置全局等待时间,在查找元素时如果未立即找到会持续等待直到超时。
driver.implicitly_wait(10) # 等待10秒显式等待
针对特定元素设置等待条件,更加灵活精准。
from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "element_id")) )常用等待条件
| 条件 | 说明 |
|---|---|
element_to_be_clickable | 元素可点击 |
presence_of_element_located | 元素存在于DOM |
visibility_of_element_located | 元素可见 |
element_to_be_selected | 元素被选中 |
6. 🖥️ 浏览器操作
窗口管理
driver.current_window_handle # 获取当前窗口句柄 driver.switch_to.window(handle) # 切换窗口 driver.maximize_window() # 最大化窗口页面滚动(执行JavaScript)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")浏览器导航
driver.get("https://www.baidu.com") # 访问页面 title = driver.title # 获取页面标题 url = driver.current_url # 获取当前URL driver.forward() # 前进 driver.back() # 后退 driver.refresh() # 刷新表单操作
element.clear() # 清空输入框 element.send_keys("文本内容") # 输入文本 element.submit() # 直接提交表单 element.send_keys(Keys.ENTER) # 模拟回车键下拉菜单处理(Select类)
from selenium.webdriver.support.ui import Select select = Select(driver.find_element(By.ID, "dropdown")) select.select_by_index(1) # 通过索引选择 select.select_by_value("value") # 通过值选择 select.select_by_visible_text("文本") # 通过可见文本选择键盘操作(Keys类)
element.send_keys(Keys.CONTROL + 'a') # 全选 element.send_keys(Keys.TAB) # 切换焦点鼠标操作(ActionChains类)
from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.move_to_element(element).perform() # 鼠标悬停 actions.double_click(element).perform() # 双击 actions.context_click(element).perform() # 右键点击 actions.drag_and_drop(source, target).perform() # 拖放元素状态判断
| 方法 | 说明 |
|---|---|
element.is_displayed() | 是否可见 |
element.is_selected() | 是否被选中(用于单选/复选框) |
element.is_enabled() | 是否可用 |
find_elements(By.xxx, "value") | 列表长度判断 |
7. ⚡ 执行JavaScript
driver.execute_script("arguments[0].click();", element) # 通过JS点击元素 driver.execute_script("return document.title;") # 获取页面标弹窗处理
alert = driver.switch_to.alert # 获取弹窗 alert.accept() # 确认 alert.dismiss() # 取消8. 📖 总结与实践
| 知识点 | 关键要点 |
|---|---|
| 元素定位 | 优先ID/NAME,XPATH作为补充 |
| 等待机制 | 隐式等待设置全局超时,显式等待针对特定条件 |
| 表单操作 | clear()、send_keys()、Select类处理下拉框 |
| 鼠标键盘 | ActionChains + Keys 模拟复杂交互 |
| JavaScript | 用于滚动、点击隐藏元素等原生方法无法完成的场景 |
案例需求:
1、打开在百度搜索主页(https://www.baidu.com/)
2、鼠标指向设置按钮,选择高级搜索
3、在高级搜索上的文档格式选项中选择PDF,在搜索结果包含全部关键词中输入“测试”,点击高级搜索按钮
代码实现:
🔮 系列内容
系列文章链接(持续更新中)
- 上一篇 白盒测试
- 下一篇 接口测试(python版)
- 还有更多…
关注我,第一时间获取更新
✨ 写在最后
如果本文对你有帮助,欢迎点赞、收藏、评论,转载引用请私信作者本人(╹ڡ╹ )~
