Finetest: 一个 Web 自动化测试框架的技术实现
项目简介
Finetest 是一个基于 Python + Selenium + pytest 的 Web 自动化测试框架,框架集成了智能元素定位、可视化回归测试、用例录制回放、文件对比等功能,旨在降低 UI 自动化测试的门槛,降低维护成本,提高测试效率。
Finetest 是一个基于 Python + Selenium + pytest 的 Web 自动化测试框架,框架集成了智能元素定位、可视化回归测试、用例录制回放、文件对比等功能,旨在降低 UI 自动化测试的门槛,降低维护成本,提高测试效率。
发现了一个有意思的库:rrweb(record and replay the web)。
rrweb 是一个开源的 js 库,可以记录用户在网页上的所有操作,然后完整地回放出来。
就像给用户在网页上的操作录了个视频,但实际上它并不是真的录屏,而是通过记录 DOM 变化、用户交互等事件,然后在回放时重新渲染出来。
我们组的自动化测试用的是RobotFramework。在编写自动化测试时,大部分工作集中于一个页面,页面上有若干报表,我们需要使用特定数据源创建特定报表,然后抓取报表数据网络请求的request和response,手动写入RobotFramework中。
最近发现了一个叫 WebSlides 的东西,可以用 HTML 做出好看的 PPT 效果。
简单说,就是一个可以让我们用 HTML + CSS 做 PPT 的库。不需要复杂的工具,只要会点 HTML 基础就能搞。
在自动化测试中,我遇到了一个问题:如何测试 Canvas 图表元素?
与常规 HTML 元素不同,Canvas 是作为一个整体区域对外暴露为一个大元素,内部的图表元素(如柱状图的柱子、地图的省份)不是独立的 DOM 元素,常规的 Selenium 点击方法无法定位到 Canvas 内部的特定位置。
传统的 UI 自动化测试代码往往是这样写的:
def test_login_and_create_report():
driver.get("/login")
driver.find_element(By.ID, "username").send_keys("admin")
driver.find_element(By.ID, "password").send_keys("admin123")
driver.find_element(By.ID, "login-btn").click()
driver.get("/reports")
driver.find_element(By.ID, "new-report").click()
driver.find_element(By.ID, "report-name").send_keys("测试报表")
driver.find_element(By.ID, "save-btn").click()
assert "创建成功" in driver.page_source问题很明显:测试逻辑被一大堆底层操作淹没了,看不出主线流程。