# playwright_ui_automation **Repository Path**: SCP_BeiChen/playwright_ui_automation ## Basic Information - **Project Name**: playwright_ui_automation - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-30 - **Last Updated**: 2025-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Playwright自动化测试框架使用手册 ## 项目概述 这是一个基于Python + Playwright + Allure的Web自动化测试框架,具有以下特性: - 🎭 **Playwright**: 现代化的Web自动化测试工具 - 📊 **Allure报告**: 美观的测试报告 - 📝 **日志系统**: 详细的测试日志记录 - 🔄 **数据驱动**: 支持YAML/JSON参数化测试 - ✅ **多重断言**: UI断言 + 数据库断言 - 🏗️ **PO模式**: 页面对象模式,高复用性 - 🔐 **登录基类**: 统一的登录管理 ## 项目结构 ``` project/ ├── page_base/ # 基础页面类 │ └── base_page.py # Playwright基础操作封装 ├── page_element/ # 页面元素定位 │ └── el_hbhz.py # 综合服务平台元素定位 ├── pages/ # 页面对象类 │ ├── login_page.py # 登录页面(基类) │ └── agent_list_page.py # 代理地列表页面 ├── tests/ # 测试用例 │ └── test_agent_search.py # 代理地搜索测试 ├── test_data/ # 测试数据 │ ├── login_search_data.yaml │ └── login_search_data.json ├── utils/ # 工具类 │ ├── log_util.py # 日志工具 │ └── db_util.py # 数据库断言工具 ├── config/ # 配置文件 │ ├── config.py # 配置管理 │ └── config.ini # 配置文件 ├── allure-results/ # Allure原始结果 ├── allure-report/ # Allure HTML报告 ├── screenshots/ # 截图目录 ├── logs/ # 日志目录 ├── pytest.ini # pytest配置 ├── requirements.txt # 依赖包 └── run_tests.py # 测试运行脚本 ``` ## 快速开始 ### 1. 环境准备 ```bash # 安装Python依赖 pip install -r requirements.txt # 安装Playwright浏览器 playwright install # 安装Allure(需要Java环境) # Windows: 下载并配置环境变量 # macOS: brew install allure # Linux: 参考官方文档 ``` ### 2. 配置文件 编辑 `config/config.ini`: ```ini [mysql] host = 10.59.9.21 port = 3306 user = root password = 12345678 database = help [smtp] host = smtp.qq.com user = your_email@qq.com password = your_password ``` ### 3. 运行测试 ```bash # 基础运行 python run_tests.py # 指定浏览器 python run_tests.py --browser firefox # 无头模式 python run_tests.py --headless # 运行特定标记的测试 python run_tests.py --markers smoke # 运行特定测试文件 python run_tests.py --path tests/test_agent_search2.py # 不生成报告 python run_tests.py --no-report ``` ### 4. 查看报告 测试完成后,Allure报告会自动生成并打开: - 报告位置: `report/result/index.html` - 原始数据: `temp/report` ## 框架特性详解 ### 1. 页面对象模式(PO) #### 基础页面类 (`page_base/base_page.py`) ```python class BasePage: def __init__(self, page: Page): self.page = page def click(self, selector: str): """点击元素""" self.find_element(selector).click() def fill(self, selector: str, text: str): """填充文本""" self.find_element(selector).fill(text) ``` #### 登录基类 (`pages/login_page.py`) ```python class LoginPage(BasePage): def login(self, username: str, password: str): """登录操作""" self.fill(hbhz_elements.USERNAME_INPUT, username) self.fill(hbhz_elements.PASSWORD_INPUT, password) self.click(hbhz_elements.LOGIN_BTN) ``` #### 业务页面 (`pages/agent_list_page.py`) ```python class AgentListPage(LoginPage): # 继承登录功能 def search_agent_by_id(self, agent_id: str): """搜索代理地""" self.fill(hbhz_elements.ID_INPUT, agent_id) self.click(hbhz_elements.SEARCH_BTN) ``` ### 2. 元素定位管理 在 `page_element/el_hbhz.py` 中统一管理所有元素定位: ```python class HBHZPageElements: # 登录页面 USERNAME_INPUT = 'input[placeholder="输入账号/手机号/email"]' PASSWORD_INPUT = 'input[type="password"][placeholder="输入密码"]' LOGIN_BTN = 'button[type="button"]' # 搜索页面 ID_INPUT = 'input[type="text"][placeholder="ID"]' SEARCH_BTN = 'button[type="button"][class*="el-button--primary"]' ``` ### 3. 数据驱动测试 #### YAML数据文件 (`test_data/login_search_data.yaml`) ```yaml test_cases: - case_id: "login_search_001" description: "管理员登录并搜索代理地ID 16750" username: "admin" password: "123456" agent_id: "16750" ``` #### 参数化测试 ```python @pytest.mark.parametrize("test_data", yaml.safe_load(open("test_data/login_search_data.yaml"))["test_cases"]) def test_login_search_with_yaml_data(self, agent_page, test_data): agent_page.complete_login_search_flow( test_data['username'], test_data['password'], test_data['agent_id'] ) ``` ### 4. 多重断言系统 #### UI断言 ```python def assert_search_result_contains_id(self, expected_id: str): """UI断言:验证搜索结果""" actual_id = self.get_text(hbhz_elements.AGENT_ID_CELL).strip() assert actual_id == expected_id ``` #### 数据库断言 ```python def verify_agent_in_database(self, agent_id: str): """数据库断言:验证代理地信息""" query = "SELECT id, name FROM agents WHERE id = %s" result = self.db_assertion.execute_query(query, (agent_id,)) assert result is not None ``` ### 5. 日志系统 框架提供详细的日志记录: ```python # 测试开始/结束 logger.log_test_start("test_name", "测试描述") logger.log_test_end("test_name", "PASSED") # 操作步骤 logger.log_step("打开页面", "导航到登录页") logger.log_action("点击", "登录按钮", "") # 断言结果 logger.log_assertion("登录验证", True, "登录成功") ``` ## 编写新的测试用例 ### 1. 创建新的页面类 ```python # pages/new_page.py from pages.login_page import LoginPage class NewPage(LoginPage): # 继承登录功能 def __init__(self, page): super().__init__(page) def new_business_method(self): """新的业务方法""" pass ``` ### 2. 添加元素定位 ```python # page_element/el_hbhz.py class HBHZPageElements: # 添加新的元素定位 NEW_ELEMENT = 'selector' ``` ### 3. 创建测试用例 ```python # tests/test_new_feature.py class TestNewFeature: @pytest.fixture def new_page(self, browser_page): return NewPage(browser_page) def test_new_feature(self, new_page): new_page.login("admin", "123456") # 继承的登录功能 new_page.new_business_method() # 新的业务方法 ``` ### 4. 添加测试数据 ```yaml # test_data/new_feature_data.yaml test_cases: - case_id: "new_001" description: "新功能测试" # 其他测试数据 ``` ## 最佳实践 ### 1. 元素定位策略 - 优先使用稳定的属性(id、data-testid) - 避免使用易变的class名称 - 使用Playwright的现代选择器语法 ### 2. 页面对象设计 - 每个页面一个类 - 业务页面继承LoginPage获得登录能力 - 方法命名清晰,体现业务含义 ### 3. 测试数据管理 - 使用YAML/JSON文件存储测试数据 - 数据与代码分离 - 支持多环境配置 ### 4. 断言策略 - UI断言验证用户界面 - 数据库断言验证数据正确性 - 组合使用提高测试可靠性 ### 5. 日志和报告 - 详细记录测试步骤 - 失败时自动截图 - 使用Allure生成美观报告 ## 常见问题 ### 1. 元素定位失败 - 检查选择器是否正确 - 确认元素是否已加载 - 使用wait_for_selector等待元素 ### 2. 测试不稳定 - 增加适当的等待时间 - 使用Playwright的自动等待机制 - 检查页面加载状态 ### 3. 数据库连接问题 - 确认数据库配置正确 - 检查网络连接 - 验证数据库权限 ### 4. 报告生成失败 - 确认Allure已正确安装 - 检查Java环境 - 确认allure-results目录存在 ## 扩展功能 框架支持以下扩展: 1. **多浏览器支持**: Chromium、Firefox、WebKit 2. **并行执行**: 使用pytest-xdist 3. **CI/CD集成**: 支持Jenkins、GitHub Actions 4. **邮件通知**: 测试结果邮件发送 5. **截图对比**: 视觉回归测试 6. **API测试**: 结合requests进行接口测试 ## 技术支持 如有问题,请检查: 1. 日志文件 (`logs/`) 2. 截图文件 (`screenshots/`) 3. Allure报告详情 4. 项目文档和示例代码