学习周记 #03 | 2026 年 AI + Web UI 自动化实战:用 LangChain Agent + Playwright 实现自然语言驱动测试

学习周记 #03 | 2026 年 AI + Web UI 自动化实战:用 LangChain Agent + Playwright 实现自然语言驱动测试 大家好本篇在上一版基础上进行了优化重点增加了Page Object ModelPOM最佳实践示例 和健壮的错误处理机制让生成的测试代码更规范、更易维护、更接近生产环境。核心目标依然是输入一句自然语言测试需求 → AI 自动生成高质量 Playwright 代码POM 模式→ 自动执行 错误处理 → 输出报告。一、核心技术栈Playwright LangChain Agent OllamaPOM 模式提升代码可维护性异常捕获 重试 日志机制二、环境准备同上篇此处省略三、完整代码实战优化版1. 定义 Page Object Model 基类Pythonfrom playwright.sync_api import Page, expect from abc import ABC, abstractmethod class BasePage(ABC): def __init__(self, page: Page): self.page page abstractmethod def goto(self): pass def safe_click(self, selector, timeout10000): 安全点击包含错误处理 try: self.page.wait_for_selector(selector, timeouttimeout) self.page.locator(selector).click() return True except Exception as e: print(f点击 {selector} 失败: {str(e)}) self.take_screenshot(ferror_click_{selector}) return False def take_screenshot(self, name: str): self.page.screenshot(pathfscreenshots/{name}.png)2. 具体 Page 示例电商登录页面Pythonclass LoginPage(BasePage): def goto(self): self.page.goto(https://demo.ecommerce.com/login) def login(self, username: str, password: str): self.safe_click(input[nameusername]) self.page.fill(input[nameusername], username) self.page.fill(input[namepassword], password) self.safe_click(button[typesubmit]) # 断言登录成功 try: expect(self.page.locator(.welcome-text)).to_be_visible(timeout5000) print(登录成功) return True except: print(登录失败) self.take_screenshot(login_failed) return False3. Tools 增强支持错误处理Pythonfrom langchain_core.tools import tool tool def execute_playwright_test(test_code: str) - str: 执行 Playwright 测试代码包含错误重试 try: with open(generated_test.py, w, encodingutf-8) as f: f.write(test_code) # 执行并捕获详细错误 import subprocess result subprocess.run([pytest, generated_test.py, --browserchromium, -q], capture_outputTrue, textTrue, timeout120) if result.returncode 0: return ✅ 测试全部通过 else: return f❌ 测试失败: {result.stderr[-500:]} # 返回最后500字符错误信息 except Exception as e: return f执行异常: {str(e)}4. 优化后的 Agent Prompt重点加强 POM 和错误处理Pythonprompt ChatPromptTemplate.from_messages([ (system, 你是一位资深测试开发工程师精通 Playwright 和 POM 模式。 要求 1. 必须使用 Page Object Model 模式组织代码 2. 所有操作使用 safe_click、显式等待等健壮方式 3. 加入完善的 try-except 错误处理和截图机制 4. 使用 getByRole、getByLabel、getByTestId 等稳定定位器 5. 代码必须可直接运行 当前时间是2026年请遵循最新最佳实践。), (placeholder, {chat_history}), (human, {input}), (placeholder, {agent_scratchpad}) ])5. 执行函数Pythondef run_ai_test(requirement: str): print(f正在处理需求: {requirement}) result agent_executor.invoke({ input: f请使用 POM 模式根据以下需求生成完整、可运行的 Playwright 测试代码并包含错误处理{requirement} }) print(AI 测试执行完成) return result使用示例Pythonrun_ai_test(测试电商网站登录流程用户名 test163.com密码 123456登录成功后进入首页并检查购物车是否为空)四、实际效果 踩坑总结优化后提升使用 POM 后代码结构清晰后续维护成本大幅降低加入 safe_click 截图 日志脚本健壮性显著提高Agent 生成的代码更规范基本符合生产标准常见问题 解决定位器失效 → 使用 safe_click 截图快速定位问题网络波动 → 增加 page.wait_for_load_state(networkidle)大模型幻觉 → 在 Prompt 中强约束使用 POM 和稳定定位器五、今日感悟加入 POM 和错误处理后我明显感觉到生成的测试脚本从“能跑”进化到了“可维护”。 这也是测开未来发展的方向AI 负责生成初稿 执行人负责设计框架、Review 质量和持续优化。下一期预告AI Web UI 自动化专栏 #02实现 AI 自愈测试Self-Healing 视觉回归测试