Playwright + DeepSeek实战:手把手教你用ai实现xmind用例生成到自动化测试(以电商为例)

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


上篇文章介绍了利用DeepSeek快速生成测试用例,并导入Xmind用于评审。本篇继续分享如何用AI把Xmind测试用例生成为自动化测试代码,并手把手教你具体提示词解决元素定位,异常覆盖等核心痛点,为自动化测试提供一种新思路和可能性。

一、引言

在上一篇中,我们通过AI快速生成了Saucedemo电商系统的XMind测试用例框架,后台有读者反馈:“从未想过测试设计能如此高效!”。

但仍有痛点未解,具体为:

1. 用例到代码的鸿沟

手工编写脚本耗时长,复杂业务场景极易遗漏分支,以电商业务来说

  • • 链路长:涉及商品浏览、添加购物车、库存校验、优惠券核销、多支付方式等场景。

  • • 异常多:库存不足、支付超时、订单重复提交等边界条件需覆盖。

  • • 维护难:页面元素频繁变更(如促销弹窗),手工维护成本极高。

2. 如何设计低耦合高内聚项目结构以保持扩展性

本文以Saucedemo.com购物车流程为例,完整演示:

  • • XMind用例 → Playwright脚本 全链路生成,包含完整项目结构

  • • AI如何解决元素定位、数据驱动、异常覆盖 三大核心痛点

  • • 高频报错调试:如“Element not found”“Payment timeout”

二、实战案例

2.1 项目结构设计:分层管理,开箱即用

saucedemo_auto/  
├── pages/                  # POM模式:页面对象封装  
│   ├── product_page.py  
│   ├── cart_page.py  
│   └── checkout_page.py  
├── tests/  
│   ├── test_cart.py        # 测试用例  
│   └── test_checkout.py  
├── data/                   # 数据驱动文件  
│   ├── cart_cases.json  
│   └── checkout_cases.csv  
├── utils/  
│   ├── wait_strategy.py    # 自定义等待策略  
│   └── error_handler.py    # 异常处理  
└── conftest.py             # Playwright全局配置  

以上为一个框架参考实现,页面对象模型,数据驱动,测试配置 等核心内容都有了。

2.2 项目实战代码:从XMind用例到可执行脚本

Step 1:用DeepSeek生成XMind测试用例(附Prompt技巧)

  • • 提问模版:

请为Saucedemo.com的购物车功能设计XMind测试用例,要求:  
1. 覆盖正常流程:添加商品、进入购物车、结算  
2. 异常场景:库存不足、重复提交订单、支付超时  
3. 包含断言点(如商品数量、总价校验)  
  • • DeepSeek生成XMind结构示例:

✅ 购物车功能  
  ├─ 正常流程  
  │   ├─ 添加单商品:商品详情页点击“Add to cart”,购物车数量+1  
  │   ├─ 添加多商品:不同商品页添加,购物车展示所有商品  
  │   └─ 移除商品:购物车内点击“Remove”,商品消失且总价更新  
  ├─ 结算流程  
  │   ├─ 正常结算:填写有效地址,选择支付方式,生成订单号  
  │   └─ 地址为空:提示“Error: Postal Code is required”  
  └─ 异常场景  
      ├─ 库存不足:添加超过库存数量的商品,提示“Inventory limited”  
      └─ 支付超时:模拟支付接口延迟,检查订单状态回滚  

Step 2:AI生成POM页面对象(关键代码详解)

  • • 提问模板:

请基于以下XMind用例,为Saucedemo购物车功能编写Playwright页面对象类:  
1. 使用POM模式分层  
2. 包含商品页、购物车页、结算页  
3. 封装元素定位和核心操作(如add_to_cart、checkout)  

用例描述:  
[粘贴XMind内容]  
  • • DeepSeek生成代码:

# pages/product_page.py  
from playwright.sync_api import Page  

class ProductPage:  
    def __init__(self, page: Page):  
        self.page = page  
        self.add_to_cart_btn = page.locator("button:has-text('Add to cart')")  
        self.cart_count = page.locator(".shopping_cart_badge")  

    def add_to_cart(self):  
        self.add_to_cart_btn.click()  

    def get_cart_count(self) -> int:  
        return int(self.cart_count.inner_text()) if self.cart_count.is_visible() else 0  

# pages/cart_page.py  
class CartPage:  
    def __init__(self, page: Page):  
        self.page = page  
        self.checkout_btn = page.locator("text=Checkout")  
        self.item_list = page.locator(".cart_item")  
        self.total_price = page.locator(".summary_total_label")  

    def checkout(self):  
        self.checkout_btn.click()  

    def get_item_count(self) -> int:  
        return self.item_list.count()  

# pages/checkout_page.py  
class CheckoutPage:  
    def __init__(self, page: Page):  
        self.page = page  
        self.first_name = page.locator("#first-name")  
        self.postal_code = page.locator("#postal-code")  
        self.continue_btn = page.locator("text=Continue")  
        self.error_msg = page.locator(".error-message")  

    def fill_shipping_info(self, first_name: str, postal_code: str):  
        self.first_name.fill(first_name)  
        self.postal_code.fill(postal_code)  
        self.continue_btn.click()  

Step 3:数据驱动 + 异常场景扩展(AI强化版)

  • • 提问模板:

请基于以下购物车测试用例,补充以下内容:  
1. 使用CSV文件管理测试数据(商品ID、数量、预期总价)  
2. 添加并发测试场景:模拟多用户同时操作购物车  
3. 处理“Element not found”错误:优化元素等待策略  
  • • DeepSeek生成代码:

# tests/test_cart.py  
import pytest  
from playwright.sync_api import expect  
from pages.product_page import ProductPage  
from pages.cart_page import CartPage  

# 数据驱动:从CSV读取测试用例  
@pytest.mark.parametrize("product_count, expected_total", [  
    (1, "$29.99"),  
    (3, "$89.97"),  
    (6, "Inventory limited"),  # 库存不足场景  
])  
def test_add_multiple_products(page, product_count, expected_total):  
    product_page = ProductPage(page)  
    cart_page = CartPage(page)  

    # 添加N个商品  
    for _ in range(product_count):  
        page.goto("https://www.saucedemo.com/inventory.html")  
        product_page.add_to_cart()  

    # 进入购物车校验  
    page.goto("https://www.saucedemo.com/cart.html")  
    if "Inventory limited" in expected_total:  
        expect(page.get_by_text("Inventory limited")).to_be_visible()  
    else:  
        expect(cart_page.get_item_count()).toBe(product_count)  
        expect(cart_page.total_price).to_contain_text(expected_total)  

# 并发测试示例(使用Playwright并行执行)  
def test_concurrent_cart_operations(context):  
    # 创建两个独立浏览器上下文  
    with context.new_page() as page1, context.new_page() as page2:  
        # 用户1添加商品  
        page1.goto("https://www.saucedemo.com/inventory.html")  
        ProductPage(page1).add_to_cart()  

        # 用户2同时操作  
        page2.goto("https://www.saucedemo.com/inventory.html")  
        ProductPage(page2).add_to_cart()  

        # 断言各自购物车数量  
        expect(ProductPage(page1).get_cart_count()).toBe(1)  
        expect(ProductPage(page2).get_cart_count()).toBe(1)  

三、AI如何解决三大核心痛点?

痛点1:元素定位频繁变更

  • • 传统方案:需人工全局搜索替换选择器。

  • • AI方案:通过语义分析自动更新定位逻辑。

DeepSeek交互修复示例:

  • • 用户提问:

“页面变更后,购物车按钮选择器失效,原选择器是button:has-text('Add to cart'),  
现在变为button[id='add-to-cart-sauce-labs-backpack'],如何批量修复?”  
  • • DeepSeek回复:

1. 在POM类中集中管理元素定位:  
   self.add_to_cart_btn = page.locator("button[id^='add-to-cart-']")  # 通配符匹配  
2. 通过AI生成适配函数:  
   def add_specific_product(self, product_id: str):  
       self.page.locator(f"button[id='add-to-cart-{product_id}']").click()  

痛点2:支付超时等异步场景

  • • 传统方案:需手动添加sleep()等待,导致执行效率低下。

  • • AI方案:自动注入智能等待策略。

AI生成代码优化:

# utils/wait_strategy.py  
from playwright.sync_api import Page  

def wait_for_payment_complete(page: Page, timeout: int = 30000):  
    # 等待支付接口完成(检测订单完成元素或API请求)  
    with page.expect_response("**/api/payment", timeout=timeout) as response:  
        return response.value.ok  

# 在测试用例中调用  
def test_payment_timeout(page):  
    checkout_page = CheckoutPage(page)  
    checkout_page.fill_shipping_info("John", "12345")  

    try:  
        wait_for_payment_complete(page, timeout=5000)  # 设置5秒超时  
    except Exception as e:  
        expect(page.get_by_text("Payment timeout")).to_be_visible()  

痛点3:复杂场景覆盖率低

  • • 传统方案:人工设计用例耗时长,易遗漏边界条件。

  • • AI方案:基于业务规则自动生成异常场景。

DeepSeek生成异常测试数据:

// data/checkout_cases.json  
[  
  {  
    "case": "正常结算",  
    "items": ["sauce-labs-backpack", "sauce-labs-bike-light"],  
    "postal_code": "12345",  
    "expected": "Order Complete"  
  },  
  {  
    "case": "超卖测试",  
    "items": ["sauce-labs-backpack@100"],  // 模拟添加100个商品  
    "postal_code": "12345",  
    "expected": "Inventory limited"  
  },  
  {  
    "case": "XSS注入攻击",  
    "postal_code": "<script>alert(1)</script>",  
    "expected": "Invalid postal code"  
  }  
]  

四、高频问题:AI如何调试“Element not found”错误?

场景复现

用户运行脚本时出现错误:

Element locator 'button:has-text('Add to cart')' did not match any elements.  

DeepSeek交互式诊断

  • • 提问模板:

运行以下Playwright脚本时报错“Element not found”:  
[粘贴代码]  

可能的页面变更:  
1. 按钮文本从“Add to cart”变为“Add to Cart”  
2. 页面加载延迟导致元素未渲染  

请提供修复方案。  

DeepSeek解决方案:

  • • 优化元素定位:使用更稳定的属性选择器。

  • • 增加等待条件:

# 修改后的ProductPage  
class ProductPage:  
    def __init__(self, page: Page):  
        self.page = page  
        # 改为CSS属性选择器  
        self.add_to_cart_btn = page.locator("[data-test='add-to-cart']")  

    def add_to_cart(self):  
        # 增加等待条件  
        self.add_to_cart_btn.wait_for(state="visible")  
        self.add_to_cart_btn.click()  

五、结语

在测试用例到实现自动化测试代码的关键步骤中,DeepSeekAI技术从代码生成,结构调优,问题排查 等全流程提供助力提升工作效率,总结如下:

  • • 用例生成效率提升90%XMind → 可执行脚本一键转换。

  • • 异常覆盖率提升60%:自动补充超卖、并发、安全测试场景。

  • • 维护成本降低70%:智能修复元素定位、优化等待策略。

  •     抛砖引玉,大家可以参考以上分享应用到自己的行业领域,进一步探索更多新的玩法。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述​​
在这里插入图片描述​​

### 将 PlaywrightDeepSeek 集成 为了实现 PlaywrightDeepSeek 的集成,可以考虑通过 API 或者 SDK 来完成自动化测试流程中的数据交换和控制逻辑。通常情况下,在现代 Web 测试框架中集成本地或第三方服务主要涉及以下几个方面: #### 设置环境变量 确保安装了必要的依赖项并配置好开发环境。对于 Node.js 用户来说,可以通过 npm 安装所需的包。 ```bash npm install @deepseek/client playwright --save-dev ``` #### 初始化客户端连接 创建一个新的 JavaScript 文件来初始化 DeepSeek 客户端实并与之建立通信链接。 ```javascript const { Client } = require('@deepseek/client'); const client = new Client('your-api-key-here'); ``` #### 编写测试脚本 利用 Playwright 提供的功能编写具体的 UI 自动化测试,并在适当的位置调用 DeepSeek 接口上传结果或者获取额外的信息支持。 ```javascript const { chromium } = require('playwright'); (async () => { const browser = await chromium.launch(); const page = await browser.newPage(); try { // Navigate to the target website and perform actions. await page.goto('https://example.com/'); // Capture screenshots or other data as needed. let screenshotBuffer = await page.screenshot({ path: 'screenshot.png' }); // Send captured information back to DeepSeek server. await client.uploadScreenshot(screenshotBuffer); console.log("Test completed successfully."); } catch (error) { console.error(error.message); } finally { await browser.close(); } })(); ``` #### 处理反馈循环 根据来自 DeepSeek 平台返回的数据调整后续操作策略,形成闭环控制系统以提高整体效率和准确性[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值