当前位置: 首页 > news >正文

Selenium UI 自动化:自定义 send_keys 方法实现与优化

在 UI 自动化测试中,输入文本是最常见的操作之一,但你是否遇到过以下问题?

  • 文本框已有默认值,直接 send_keys 会导致测试失败。
  • 使用 element.clear() 后,仍无法触发前端的 input 事件。
  • 脚本执行速度慢或抛出元素不可见的异常。

今天,我分享一个我在项目中封装的 高可靠性 send_keys 方法,并结合 Selenium + Python 做了优化。

方法实现

def send_keys(self, locator, text):"""输入文本"""try:# 定位元素element = self.find_element(locator)# 清空文本框element.clear()# 执行 JS 清空并触发 input 事件,确保前端响应变化self.driver.execute_script("arguments[0].value=''; arguments[0].dispatchEvent(new Event('input'));", element)# 输入新文本element.send_keys(text)logger.info(f"输入文本到 {locator}: {text}")except Exception as e:self._handle_error("send_keys", locator, e)

核心优化点

1. 双重清空文本框

  • element.clear() 可以清除文本框内容,但有些前端框架会阻止或异步修改输入值。
  • 使用 JavaScript 强制清空,并触发 input 事件,确保前端监听器正确捕获变化。

2. 捕获异常并统一处理

  • 通过 try-except 捕获所有操作异常,调用 _handle_error 方法统一处理(截图、日志等)。
  • 提高自动化稳定性,减少测试用例因元素暂未加载而失败。

3. 日志记录

  • 使用 logger.info 输出操作信息,便于排查问题。
  • 对测试报告友好,可直接查看元素和输入内容。

使用示例

login_page.send_keys(("id", "username"), "test_user")
login_page.send_keys(("id", "password"), "123456")
login_page.click(("id", "login_button"))
  • locator 可以是 (By.ID, “username”) 或 (By.XPATH, “//input[@name=‘username’]”)。
  • 兼容绝大多数输入框、前端框架(React、Vue、Angular)。

总结

封装高质量的 send_keys 方法,可以解决:

  • 前端异步框架导致的输入问题
  • 测试脚本稳定性差、间歇性失败的问题
  • 日志和异常处理分散、难以排查的问题

在 UI 自动化中,小工具的封装能大幅提升测试效率和稳定性,推荐每个项目都建立自己的基础页面类库。

http://www.dtcms.com/a/389447.html

相关文章:

  • golang后端面试复习
  • webpack学习笔记-entry
  • webpack学习之output
  • 应急响应靶机-WindowsServer2022-web2
  • Netty:网络编程基础
  • VulnHub打靶记录——AdmX_new
  • 筑牢安全防线,守护线上招标采购管理软件
  • TP8框架安全文件与文件夹权限相关设置
  • 练习:客户端从终端不断读取数据,通过UDP,发送给服务端,服务端输出
  • Android Studio报错 C Users User .gradle caches... (系统找不到指定的文件)
  • 微服务分页查询:MyBatis-Plus vs 自定义实现
  • Opera Neon:Opera 推出的AI智能代理浏览器
  • Java 基础知识整理:字面量、常量与变量的区别
  • 模型部署:(六)安卓端部署Yolov8分类项目全流程记录
  • android 查看apk签名信息
  • SQL提取国家名称与延伸词技巧
  • 通过 商业智能 BI 数据分析提升客流量和销售额
  • PostgreSQL 与 MySQL 谁的地位更高?——全方位对比分析
  • rust编写web服务08-配置管理与日志
  • 浏览器事件机制里,事件冒泡和事件捕获的具体区别是什么?在React的合成事件体系下有什么不同的?
  • 企业级实战:构建基于Qt、C++与YOLOv8的模块化工业视觉检测系统(基于QML)
  • 【Java】Ubuntu上发布Springboot 网站
  • 【入门级-算法-3、基础算法:贪心法】
  • Linux 网络
  • 【LVS入门宝典】探秘LVS透明性:客户端如何“看不见”后端服务器的魔法
  • 23届考研-C++面经(OD)
  • 运维安全06,服务安全
  • C++篇(9)list的模拟实现
  • Bugku-宽带信息泄露
  • LeetCode 845.数组中的最长山脉