首页 > 其他分享 >智能化实现 Playwright 脚本自动生成的解决方案

智能化实现 Playwright 脚本自动生成的解决方案

时间:2025-01-23 14:29:25浏览次数:3  
标签:脚本 Playwright 解决方案 智能化 选择器 生成 操作步骤 page

在测试自动化开发中,自动生成 Playwright 脚本 是一个极具吸引力的功能,但目前大多数实现仍然依赖于手动定位页面元素并编写脚本。为了实现更智能化的脚本生成,我们需要结合以下技术和工具,从解析测试用例到自动定位页面元素,再到生成脚本,尽可能减少人工干预。

本篇文章将带你探索如何通过 智能化手段 实现 Playwright 脚本自动生成,包括:

  1. 通过自然语言解析测试用例,生成大致的操作步骤
  2. 结合 Playwright 的录制工具,自动生成基础脚本
  3. 通过 AI 或预定义规则,自动定位页面元素
  4. 将生成的操作步骤与元素定位结合,完成 Playwright 脚本的智能化生成

1. 实现目标

我们希望实现以下功能:

  1. 输入测试用例(自然语言格式):如操作步骤和预期结果。
  2. 智能解析操作步骤,生成对应的 Playwright 操作指令:如点击、输入、验证等。
  3. 自动定位页面元素:通过录制工具或 AI 模型,自动生成高质量的选择器。
  4. 生成完整的 Playwright 测试脚本:包括元素操作、断言以及结果验证。

2. 技术实现方案

为了实现智能化的脚本生成,我们可以分以下几个步骤来推进:

2.1 测试用例解析:从自然语言到操作指令

输入测试用例的格式

我们可以设计以下结构化的测试用例输入:

{
    "用例编号": "TC001",
    "用例标题": "登录页面功能验证",
    "操作步骤": [
        "打开登录页面 https://example.com",
        "在用户名输入框中输入 admin",
        "在密码输入框中输入 123456",
        "点击登录按钮",
        "验证显示主页标题 '欢迎'"
    ],
    "预期结果": "登录成功,显示主页标题"
}
解析操作步骤

利用规则匹配或自然语言处理(NLP)技术,将操作步骤解析为 Playwright 指令:

import re

def parse_steps_to_instructions(steps):
    instructions = []
    for step in steps:
        if "打开" in step and "页面" in step:
            url = re.search(r"https?://[^\s]+", step).group(0)
            instructions.append(f"page.goto('{url}')")
        elif "输入框" in step and "输入" in step:
            element = re.search(r"在(.*?)输入框", step).group(1)
            value = re.search(r"输入 (.+)", step).group(1)
            instructions.append(f"page.fill('input[placeholder=\"{element}\"]', '{value}')")
        elif "点击" in step:
            button = re.search(r"点击(.*?)按钮", step).group(1)
            instructions.append(f"page.click('button:has-text(\"{button}\")')")
        elif "验证" in step:
            text = re.search(r"验证显示(.*?)'", step).group(1)
            instructions.append(f"assert page.locator('text={text}').is_visible()")
    return instructions

# 示例调用
steps = [
    "打开登录页面 https://example.com",
    "在用户名输入框中输入 admin",
    "在密码输入框中输入 123456",
    "点击登录按钮",
    "验证显示主页标题 '欢迎'"
]
instructions = parse_steps_to_instructions(steps)
print("\n".join(instructions))

输出结果

page.goto('https://example.com')
page.fill('input[placeholder="用户名"]', 'admin')
page.fill('input[placeholder="密码"]', '123456')
page.click('button:has-text("登录")')
assert page.locator('text=欢迎').is_visible()

2.2 自动生成基础脚本:结合 Playwright 的录制工具

Playwright 提供了录制工具 playwright codegen,可以自动记录用户操作并生成基础脚本。我们可以将录制生成的脚本与解析后的操作步骤结合,提升生成脚本的准确性。

运行 Playwright 录制工具

在命令行中运行以下命令,启动录制工具:

playwright codegen https://example.com

录制工具会自动打开浏览器,记录你的操作并生成对应的代码。

整合录制与操作解析

录制工具生成的代码可以作为基础脚本,与解析的操作步骤结合,进一步优化选择器或添加断言。


2.3 自动定位页面元素:智能生成选择器

页面元素的选择器是自动化脚本的核心,选择器质量的高低直接影响脚本的稳定性。我们可以通过以下方式实现选择器的智能生成:

方案 1:Playwright 的内置选择器推荐

Playwright 会根据页面结构自动推荐最佳选择器,你可以通过录制工具或调试模式获取:

playwright codegen --target python
方案 2:结合 AI 自动生成选择器

利用 AI 模型(如 ChatGPT 或自定义模型),结合页面 DOM 结构和元素描述,生成语义化选择器。

示例:

  • 输入:"用户名输入框"
  • 输出:input[placeholder="用户名"]

示例代码:

def generate_selector(description):
    # 假设我们有一个简单的规则匹配
    if "用户名" in description:
        return 'input[placeholder="用户名"]'
    elif "密码" in description:
        return 'input[placeholder="密码"]'
    elif "登录按钮" in description:
        return 'button:has-text("登录")'
    return ""

2.4 生成完整的 Playwright 脚本

结合解析的指令和自动生成的选择器,我们可以生成完整的 Playwright 脚本:

def generate_playwright_script_from_steps(test_case):
    script = [
        "from playwright.sync_api import sync_playwright\n\n",
        "def test_case():\n",
        "    with sync_playwright() as p:\n",
        "        browser = p.chromium.launch(headless=False)\n",
        "        page = browser.new_page()\n"
    ]
    instructions = parse_steps_to_instructions(test_case["操作步骤"])
    for instr in instructions:
        script.append(f"        {instr}\n")
    script.append("        browser.close()\n")
    return "".join(script)

# 示例调用
test_case = {
    "用例编号": "TC001",
    "用例标题": "登录页面功能验证",
    "操作步骤": [
        "打开登录页面 https://example.com",
        "在用户名输入框中输入 admin",
        "在密码输入框中输入 123456",
        "点击登录按钮",
        "验证显示主页标题 '欢迎'"
    ],
    "预期结果": "登录成功,显示主页标题"
}
script = generate_playwright_script_from_steps(test_case)
print(script)

输出的 Playwright 脚本

from playwright.sync_api import sync_playwright

def test_case():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        page.goto('https://example.com')
        page.fill('input[placeholder="用户名"]', 'admin')
        page.fill('input[placeholder="密码"]', '123456')
        page.click('button:has-text("登录")')
        assert page.locator('text=欢迎').is_visible()
        browser.close()

3. 优化点与扩展

3.1 提升选择器的准确性

  • 结合页面 DOM 结构动态生成选择器,避免使用容易变化的属性(如 id 和纯文本)。
  • 支持自定义规则或通过 AI 模型生成语义化选择器。

3.2 支持更多操作类型

  • 解析更多复杂的操作步骤(如拖拽、上传文件、处理弹窗等)。
  • 支持条件分支和循环操作。

3.3 集成测试数据

  • 结合数据驱动测试,将测试数据与操作步骤分离,支持参数化测试。

4. 小结

通过自然语言解析、Playwright 录制工具、智能选择器生成等技术,我们可以大幅减少自动化脚本开发中的手动工作量,实现 Playwright 脚本的智能化生成。

亮点

  1. 自动解析测试用例:从自然语言生成自动化操作指令。
  2. 结合录制工具:快速生成基础脚本,减少重复劳动。
  3. 智能选择器生成:提升脚本的稳定性和可维护性。

下一篇预告:我们将在下一篇文章中探索 接口测试的自动化与 Mock 数据解决方案,帮助你轻松完成接口的高效验证与环境隔离。敬请期待!

标签:脚本,Playwright,解决方案,智能化,选择器,生成,操作步骤,page
From: https://blog.csdn.net/weixin_44872675/article/details/145300469

相关文章

  • paddleocr报错解决方案汇总
    一、安装注意事项python不要超过10,尽量选8/9/10二、快速开始参考官方文档:https://paddlepaddle.github.io/PaddleOCR/main/ppstructure/quick_start.html#221一般都要带方向识别,这里复制其中一段代码,防止官网挂掉importosimportcv2frompaddleocrimportPPStructure,dr......
  • 联想 ThinkPad 笔记本T14 CPU 降频解决方案
    原因:在工作中,打开多个IDE的情况下,会出现卡顿问题,发现是由于CPU降频到0.5GHz导致的。环境:笔记本是联想ThinkPadT14CPU:12thGenInterlCorei7-1260P系统为Window10专业版解决办法经过搜索后,适合的方案如下:打开电源的卓越性能模式在WindowsPowershell中......
  • SSM建材生产智能化系统-毕业设计源码24838
    目 录1绪论1.1研究背景与意义1.2国内外研究现状1.3论文结构与章节安排2 建材生产智能化系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 ......
  • SSMCRM权限管理系统SSM架构下的CRM权限管理解决方案基于SSM框架的CRM权限管理系统设计
    计算机毕业设计SSMCRM权限管理系统4mo02标题 (配套有源码程序mysql数据库论文)本套源码可以先看具体功能演示视频领取,文末有联xi可分享随着企业信息化进程的加速,客户关系管理(CRM)系统已成为企业运营的核心工具之一。然而,如何有效管理CRM系统中的权限,确保不同角色的用户能够......
  • mac系统无法安装 psycopg2-binary的解决方案
    报错信息ld:library'ssl'notfoundclang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)error:command'/usr/bin/gcc'failedwithexitcode1[endofoutput]note:Thiserrororigi......
  • VUE分片上传大型视频文件到服务器解决方案
    要求:免费,开源,技术支持技术:百度webuploader,分块,切片,断点续传,秒传,MD5验证,纯JS实现,支持第三方软件集成前端:vue2,vue3,vue-cli,html5,webuploader后端:asp.net,.netmvc,.netcore,asp,jsp,java,springboot,php,数据库:MySQL,Oracle,SQLServer,达梦,人大金仓,国产数据库平......
  • 计算机毕业设计Springboot基于Java的医院床位管理系统 基于Spring Boot的Java医院床位
    计算机毕业设计Springboot基于Java的医院床位管理系统18b553a9(配套有源码程序mysql数据库论文)本套源码可以先看具体功能演示视频领取,文末有联xi可分享随着医疗行业的不断发展,医院床位管理系统的开发成为了提升医疗服务效率的关键环节。传统的人工管理方式不仅效率低下,还......
  • 带 `$` 符号的 Redis 密码在 Flink 调度脚本中被截断的解决方案 WRONGPASS invalid us
    在实际生产使用中,如果你的Redis密码中包含$符号,而你又通过调度脚本(如DolphinScheduler)或Shell参数方式传递给Flink,就可能造成密码被部分截断,进而导致:WRONGPASSinvalidusername-passwordpairoruserisdisabled这是因为Shell解释$为变量展开符,后续字符被当作环......
  • 以下是设置Hugging Face `from_pretrained` 默认保存路径的完整解决方案:
    以下是设置HuggingFacefrom_pretrained默认保存路径的完整解决方案:方法1:通过环境变量全局设置在代码或系统环境变量中设置模型缓存路径:importosfrompathlibimportPath#设置自定义缓存路径(推荐使用绝对路径)CUSTOM_CACHE_DIR="/path/to/your/model_cache"......
  • copy Electron 离线环境打包解决方案(electron-forge) 未尝试
     1.在线环境准备创建新项目:#创建并进入项目目录mkdirmy-electron-app&&cdmy-electron-app#初始化项目npminit-y#安装electronnpminstall--save-develectron#安装electron-forgenpminstall--save-dev@electron-forge/cli@electron-forge/maker......