前言
测试工程师在自动化测试中常常遇到以下难题:
- 页面复杂,元素难以定位:面对复杂的页面结构,手动编写元素定位代码既耗时又容易出错。
- 重复劳动:每次新增页面或调整页面布局时,都需要重新手动创建 Page Object,对测试效率造成极大影响。
- 适配复杂场景:面对需要鉴权的页面(如登录后才能访问的页面),如何高效获取页面元素成为一大挑战。
如果有一个工具,能够一键爬取页面所有元素,自动生成符合 Page Object 设计模式的 Python 文件,并支持复杂场景(如鉴权)和自定义扩展,是不是可以彻底解放测试工程师?
本文将为你展示如何构建这样的工具,利用 Python 爬虫 提取页面元素,并结合 Ollama 本地部署的 DeepSeek 模型 提高元素定位的准确性,自动生成符合 PO 模式的代码文件。无论页面结构有多复杂,这个工具都能轻松胜任,同时保证代码清晰、易扩展,适合 Python 基础较弱的测试工程师使用。
工具功能概述
-
页面元素提取
- 爬取 HTML 页面,提取所有常见控件(如按钮、输入框、下拉列表等)。
- 根据属性优先级(如
id
、name
、class
)生成准确的定位代码。
-
支持鉴权处理
- 对于需要登录的页面,支持通过请求头添加鉴权信息(如
Authorization
Token)完成页面爬取。
- 对于需要登录的页面,支持通过请求头添加鉴权信息(如
-
自动生成 PO 对象
- 按照 Page Object 设计模式,生成 Python 文件,分层管理页面对象及其操作方法。
-
接入 DeepSeek 提高定位准确性
- 利用 DeepSeek 模型对提取的元素进行分类和优化,确保生成的代码更智能、更准确。
-
支持复杂页面与扩展
- 针对复杂页面结构(如动态加载元素),提供可扩展的通用解决方案。
工具实现
1. 依赖安装
在编写代码前,请确保安装以下依赖库:
pip install requests beautifulsoup4 playwright jinja2
2. 页面元素提取代码
以下代码演示如何爬取页面 HTML 并提取所有常见控件(如按钮、输入框等),支持基于属性优先级生成准确的定位代码。
from bs4 import BeautifulSoup
import requests
def extract_page_elements(url, headers=None):
"""
爬取页面并提取常见控件信息
:param url: 页面 URL
:param headers: 请求头(支持鉴权)
:return: 页面控件信息字典
"""
# 发起 HTTP 请求
response = requests.get(url, headers=headers)
if response.status_code != 200:
raise Exception(f"Failed to fetch page: {
response.status_code}")
# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(response.text, "html.parser")
elements = []
# 提取按钮
for button in soup.find_all("button"):
elements.append({
"tag": "button",
"id": button.get("id"),
"name": button.get("name"),
"class"<