Playwright 自動化測試腳本生成提示詞(端到端測試:穩定定位器、自動等待、登入態複用)

想給網頁的關鍵流程(登入、下單、提交表單)寫端到端測試,又怕寫出來的腳本一改頁面就掛、時好時壞時用:描述流程和頁面結構,得到按 Playwright 推薦寫法生成的測試代碼、頁面對象封裝和運行命令。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是一名熟悉 Playwright Test 的測試開發工程師。請為下面的用戶流程編寫端到端測試。

- 語言:[TypeScript/Python]
- 被測網站地址(測試環境):[測試環境地址]
- 要測試的流程(按用戶操作一步步寫):
  [流程步驟]
- 頁面關鍵元素的 HTML 片段或描述(按鈕文字、輸入框 label、是否有 data-testid):
  [粘貼 HTML 或描述]
- 登入方式:[如帳號密碼錶單、短訊驗證碼、無需登入]
- 測試數據從哪裏來:[如每次通過接口創建、使用固定測試帳號]

編寫要求:
1. 定位器優先級:按角色和可訪問名稱(getByRole)、label、placeholder、文本,再到 data-testid;盡量不用依賴層級結構的 CSS 或 XPath。說明每個關鍵定位器為什麼這樣選。
2. 等待:依靠 Playwright 的自動等待和帶重試的斷言(如 toBeVisible、toHaveURL、toHaveText),不要寫固定時長的等待。
3. 登入態:如果多個測試都需要登入,用一個初始化步驟登入一次並儲存登入狀態,其他測試複用,不在每個測試裏重複走登入頁面。
4. 測試獨立:每個測試自己準備數據、不依賴其他測試的執行順序;能通過接口準備的數據就不要走介面。
5. 結構:流程較長時,用頁面對象(Page Object)封裝頁面操作,測試文件只寫業務步驟和斷言。
6. 失敗排查:配置失敗時保留截圖和追蹤記錄(trace),並寫出查看追蹤記錄的命令。
7. 給出項目配置文件中與本測試相關的關鍵配置、運行單個測試文件的命令、以有介面模式調試的命令。

需要驗證碼、第三方支付這類無法自動化的步驟,說明應該怎麼在測試環境繞開(例如測試環境的固定驗證碼或模擬接口),不要嘗試破解。

高亮處換成你自己的內容:[TypeScript/Python]、[測試環境地址]、[流程步驟]、[粘貼 HTML 或描述]、[如帳號密碼錶單、短訊驗證碼、無需登入]、[如每次通過接口創建、使用固定測試帳號]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[頁面關鍵元素] 最好直接從瀏覽器開發者工具裏複製按鈕、輸入框的 HTML 片段,AI 才能選出可靠的定位器。沒有的話,至少寫清按鈕上的文字和輸入框旁邊的標籤文字。

常見坑:

  • 用 div > div:nth-child(3) > button 這樣的選擇器,頁面結構一調整就全部失效。按角色和可見文字定位,和用戶的操作方式一致,也更穩定。
  • 寫 waitForTimeout(3000) 是端到端測試不穩定的頭號原因:機器慢時不夠,機器快時浪費時間。改用等待具體條件的斷言。
  • 測試之間共用一個帳號的購物車或訂單數據,並行運行時互相干擾。每個測試用接口創建自己的數據。

追問技巧:腳本跑失敗時,把錯誤訊息和追蹤記錄裏看到的頁面狀態描述貼回去,問「是定位器問題、時序問題還是數據問題」。

示例輸出

示例,僅供參考(TypeScript,節選)
ts
// tests/auth.setup.ts:只登入一次並儲存登入狀態
import { test as setup, expect } from '@playwright/test'

setup('登入', async ({ page }) => {
  await page.goto('/login')
  await page.getByLabel('電郵').fill(process.env.E2E_USER!)
  await page.getByLabel('密碼').fill(process.env.E2E_PASS!)
  await page.getByRole('button', { name: '登入' }).click()
  await expect(page).toHaveURL(/\/dashboard/)
  await page.context().storageState({ path: 'playwright/.auth/user.json' })
})
ts
// tests/checkout.spec.ts
test('加入購物車後結算', async ({ page }) => {
  await page.goto('/products/demo-1')
  await page.getByRole('button', { name: '加入購物車' }).click()
  await expect(page.getByTestId('cart-count')).toHaveText('1')
})
bash
npx playwright test tests/checkout.spec.ts --ui   # 有介面模式調試
npx playwright show-trace test-results/xxx/trace.zip

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~