Skip to main content

偵錯測試

VS Code 偵錯器

我們建議使用 VS Code Extension 進行偵錯,以獲得更好的開發者體驗。使用 VS Code 擴充功能,您可以在 VS Code 中直接偵錯測試、查看錯誤訊息、設定斷點並逐步執行測試。

running test in debug mode

錯誤訊息

如果您的測試失敗,VS Code 會在編輯器中顯示錯誤訊息,包括預期值、實際值以及完整的呼叫記錄。

error messaging in vs code

即時偵錯

您可以在 VS Code 中即時偵錯測試。在勾選 Show Browser 選項執行測試後,點選 VS Code 中的任何定位器,它會在瀏覽器視窗中被突出顯示。Playwright 也會顯示是否有多個匹配項目。

live debugging in VS Code

您也可以在 VS Code 中編輯定位器,Playwright 會在瀏覽器視窗中即時顯示變更。

live debugging in VS Code

挑選定位器

透過點選測試側邊欄中的 Pick locator 按鈕,挑選一個定位器並複製到您的測試檔案中。然後在瀏覽器中點選您需要的元素,它會顯示在 VS Code 的 Pick locator 方塊中。按下鍵盤上的 'enter' 將定位器複製到剪貼簿,然後貼到程式碼中的任何位置。如果要取消,請按下 'escape'。

Pick locators

Playwright 會檢視您的頁面並找出最佳的定位器,優先使用角色、文字和測試 ID 定位器。如果 Playwright 找到多個符合該定位器的元素,它會改進定位器使其具有彈性並唯一識別目標元素,因此您不必擔心因定位器導致測試失敗。

在偵錯模式中執行

要設定斷點,請點選您要設置斷點的行號旁邊,直到出現紅點。透過右鍵點選您想要執行的測試旁邊的行,在偵錯模式下執行測試。

setting debug test mode

瀏覽器視窗會開啟,測試會執行並在設定斷點的地方暫停。您可以在 VS Code 的選單中逐步執行測試、暫停測試並重新執行測試。

running test in debug mode

使用 Chrome DevTools 偵錯測試

在 VS Code 中選擇 Run Test 而不是使用 Debug Test。啟用 Show Browser 後,瀏覽器工作階段會被重複使用,讓您可以開啟 Chrome DevTools 持續偵錯測試和網頁應用程式。

在不同瀏覽器中偵錯

預設情況下,偵錯使用 Chromium 設定檔進行。您可以透過右鍵點選測試側邊欄中的偵錯圖示,並從下拉選單中點選 'Select Default Profile' 選項,在不同瀏覽器上偵錯測試。

debugging on specific profile

然後選擇您想要用於偵錯測試的測試設定檔。每次在偵錯模式下執行測試時,都會使用您選擇的設定檔。您可以透過右鍵點選測試所在的行號並從選單中選擇 'Debug Test' 來在偵錯模式下執行測試。

choosing a profile for debugging

若要了解更多關於偵錯的資訊,請參閱 Debugging in Visual Studio Code

Playwright Inspector

Playwright Inspector 是一個 GUI 工具,可以幫助您偵錯 Playwright 測試。它讓您可以逐步執行測試、即時編輯定位器、挑選定位器並查看可操作性記錄。

Playwright Inspector

在偵錯模式中執行

使用 --debug 旗標執行您的測試以開啟檢查器。這會設定 Playwright 進行偵錯並開啟檢查器。當使用 --debug 時,會設定額外的實用預設值:

  • 瀏覽器以有頭模式啟動
  • 預設逾時設定為 0(= 無逾時)

偵錯所有瀏覽器上的所有測試

要偵錯所有測試,請使用 --debug 旗標執行測試指令。這會逐一執行測試,並為每個測試開啟檢查器和瀏覽器視窗。

npx playwright test --debug

偵錯所有瀏覽器上的一個測試

要偵錯特定行上的一個測試,執行測試指令後加上測試檔案名稱和您想要偵錯的測試行號,然後加上 --debug 旗標。這會在您的 playwright.config 中設定的每個瀏覽器中執行單一測試並開啟檢查器。

npx playwright test example.spec.ts:10 --debug

在特定瀏覽器上偵錯

在 Playwright 中,您可以在 playwright.config 中設定專案。設定完成後,您可以使用 --project 旗標並加上在 playwright.config 中設定的專案名稱,在特定瀏覽器或行動檢視區上偵錯測試。

npx playwright test --project=chromium --debug
npx playwright test --project="Mobile Safari" --debug
npx playwright test --project="Microsoft Edge" --debug

在特定瀏覽器上偵錯一個測試

要在特定瀏覽器上執行一個測試,請加上測試檔案名稱和您想要偵錯的測試行號,以及 --project 旗標並加上專案名稱。

npx playwright test example.spec.ts:10 --project=webkit --debug

逐步執行您的測試

您可以使用檢查器頂部的工具列來播放、暫停或逐步執行測試的每個動作。您可以在測試程式碼中看到當前動作被突出顯示,匹配的元素也會在瀏覽器視窗中被突出顯示。

Playwright Inspector and browser

從特定斷點執行測試

為了加速偵錯過程,您可以在測試中加入 page.pause() 方法。這樣您就不必逐步執行測試的每個動作來到達您想要偵錯的點。

await page.pause();

一旦您新增了 page.pause() 呼叫,在偵錯模式下執行您的測試。點選檢查器中的「Resume」按鈕會執行測試,並且只會在 page.pause() 處停止。

test with page.pause

即時編輯定位器

在偵錯模式下執行時,您可以即時編輯定位器。在 'Pick Locator' 按鈕旁邊有一個欄位顯示測試暫停處的定位器。您可以直接在 Pick Locator 欄位中編輯此定位器,匹配的元素會在瀏覽器視窗中被突出顯示。

live editing locators

挑選定位器

在偵錯時,您可能需要選擇更具彈性的定位器。您可以透過點選 Pick Locator 按鈕並在瀏覽器視窗中滑鼠游標停留在任何元素上來實現。當滑鼠游標停留在元素上時,您會看到下方突出顯示的定位此元素所需的程式碼。在瀏覽器中點選元素會將定位器新增到欄位中,然後您可以調整它或將其複製到程式碼中。

Picking locators

Playwright 會檢視您的頁面並找出最佳的定位器,優先使用角色、文字和測試 ID 定位器。如果 Playwright 找到多個符合該定位器的元素,它會改進定位器使其具有彈性並唯一識別目標元素,因此您不必擔心因定位器導致測試失敗。

可操作性記錄

當 Playwright 在點選動作上暫停時,它已經執行了可在記錄中找到的可操作性檢查。這可以幫助您了解測試期間發生了什麼,以及 Playwright 做了什麼或嘗試做什麼。記錄會告訴您元素是否可見、已啟用且穩定、定位器是否解析為元素、是否捲動到檢視區等等。如果無法達到可操作性,它會將動作顯示為待處理。

Actionability Logs

Trace Viewer

Playwright Trace Viewer 是一個 GUI 工具,讓您可以探索測試的錄製 Playwright 追蹤。您可以在左側前後瀏覽每個動作,並在動作期間直觀地看到發生了什麼。在螢幕中央,您可以看到動作的 DOM 快照。在右側,您可以看到動作詳細資訊,例如時間、參數、返回值和記錄。您也可以探索主控台訊息、網路請求和原始碼。

若要了解更多關於如何錄製追蹤和使用 Trace Viewer 的資訊,請查看 Trace Viewer 指南。

瀏覽器開發者工具

當使用 PWDEBUG=console 在偵錯模式下執行時,開發者工具主控台中會有一個 playwright 物件可用。開發者工具可以幫助您:

  • 檢視 DOM 樹並尋找元素選擇器
  • 查看主控台記錄執行期間(或學習如何透過 API 讀取記錄
  • 檢查網路活動和其他開發者工具功能

這也會將 Playwright 的預設逾時設定為 0(= 無逾時)。

Browser Developer Tools with Playwright object

要使用瀏覽器開發者工具偵錯測試,首先使用 page.pause() 方法在測試中設定斷點來暫停執行。

await page.pause();

一旦您在測試中設定了斷點,您就可以使用 PWDEBUG=console 執行測試。

PWDEBUG=console npx playwright test

一旦 Playwright 啟動瀏覽器視窗,您就可以開啟開發者工具。playwright 物件將在主控台面板中可用。

playwright.$(selector)

使用實際的 Playwright 查詢引擎查詢 Playwright 選擇器,例如:

playwright.$('.auth-form >> text=Log in');

<button>Log in</button>

playwright.$$(selector)

playwright.$ 相同,但返回所有匹配的元素。

playwright.$$('li >> text=John')

[<li>, <li>, <li>, <li>]

playwright.inspect(selector)

在元素面板中顯示元素。

playwright.inspect('text=Log in')

playwright.locator(selector)

建立定位器並查詢匹配的元素,例如:

playwright.locator('.auth-form', { hasText: 'Log in' });

Locator ()
- element: button
- elements: [button]

playwright.selector(element)

為給定元素生成選擇器。例如,在元素面板中選擇一個元素並傳遞 $0

playwright.selector($0)

"div[id="glow-ingress-block"] >> text=/.*Hello.*/"

冗長的 API 記錄

Playwright 支援使用 DEBUG 環境變數進行冗長記錄。

DEBUG=pw:api npx playwright test
note

對於 WebKit:在執行期間啟動 WebKit Inspector 會阻止 Playwright 腳本進一步執行,並會重設預先設定的使用者代理和裝置模擬。

Headed mode

Playwright 預設在無頭模式下執行瀏覽器。要改變此行為,請使用 headless: false 作為啟動選項。

您也可以使用 slowMo 選項來減慢執行速度(每次操作 N 毫秒)並在偵錯時跟隨。

// Chromium, Firefox, or WebKit
await chromium.launch({ headless: false, slowMo: 100 });