学习周记 #03 | 2026 年 AI + Web UI 自动化实战:用 LangChain Agent + Playwright 实现自然语言驱动测试
·
大家好本篇在上一版基础上进行了优化,重点增加了 Page Object Model(POM) 最佳实践示例 和 健壮的错误处理机制,让生成的测试代码更规范、更易维护、更接近生产环境。
核心目标依然是:输入一句自然语言测试需求 → AI 自动生成高质量 Playwright 代码(POM 模式)→ 自动执行 + 错误处理 → 输出报告。
一、核心技术栈
- Playwright + LangChain Agent + Ollama
- POM 模式(提升代码可维护性)
- 异常捕获 + 重试 + 日志机制
二、环境准备
(同上篇,此处省略)
三、完整代码实战(优化版)
1. 定义 Page Object Model 基类
Python
from 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, timeout=10000):
"""安全点击,包含错误处理"""
try:
self.page.wait_for_selector(selector, timeout=timeout)
self.page.locator(selector).click()
return True
except Exception as e:
print(f"点击 {selector} 失败: {str(e)}")
self.take_screenshot(f"error_click_{selector}")
return False
def take_screenshot(self, name: str):
self.page.screenshot(path=f"screenshots/{name}.png")
2. 具体 Page 示例(电商登录页面)
Python
class LoginPage(BasePage):
def goto(self):
self.page.goto("https://demo.ecommerce.com/login")
def login(self, username: str, password: str):
self.safe_click('input[name="username"]')
self.page.fill('input[name="username"]', username)
self.page.fill('input[name="password"]', password)
self.safe_click('button[type="submit"]')
# 断言登录成功
try:
expect(self.page.locator(".welcome-text")).to_be_visible(timeout=5000)
print("登录成功!")
return True
except:
print("登录失败")
self.take_screenshot("login_failed")
return False
3. Tools 增强(支持错误处理)
Python
from langchain_core.tools import tool
@tool
def execute_playwright_test(test_code: str) -> str:
"""执行 Playwright 测试代码,包含错误重试"""
try:
with open("generated_test.py", "w", encoding="utf-8") as f:
f.write(test_code)
# 执行并捕获详细错误
import subprocess
result = subprocess.run(["pytest", "generated_test.py", "--browser=chromium", "-q"],
capture_output=True, text=True, timeout=120)
if result.returncode == 0:
return "✅ 测试全部通过"
else:
return f"❌ 测试失败: {result.stderr[-500:]}" # 返回最后500字符错误信息
except Exception as e:
return f"执行异常: {str(e)}"
4. 优化后的 Agent Prompt(重点加强 POM 和错误处理)
Python
prompt = 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. 执行函数
Python
def run_ai_test(requirement: str):
print(f"正在处理需求: {requirement}")
result = agent_executor.invoke({
"input": f"请使用 POM 模式,根据以下需求生成完整、可运行的 Playwright 测试代码,并包含错误处理:{requirement}"
})
print("AI 测试执行完成!")
return result
使用示例:
Python
run_ai_test("测试电商网站登录流程:用户名 test@163.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) + 视觉回归测试
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)