跳到主要內容

偵錯測試

Playwright 檢測器

Playwright 檢測器是一個 GUI 工具,可協助您偵錯 Playwright 測試。它允許您逐步執行測試、即時編輯定位器、選取定位器並查看可操作性日誌。

Playwright Inspector

以偵錯模式執行

設定 `PWDEBUG` 環境變數以在偵錯模式下執行 Playwright 測試。這會將 Playwright 配置為偵錯並開啟檢測器。當設定 `PWDEBUG=1` 時,會配置其他有用的預設值

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

逐步執行測試

您可以使用檢測器頂部的工具列來播放、暫停或逐步執行測試的每個動作。您可以在測試程式碼中看到目前醒目顯示的動作,以及在瀏覽器視窗中醒目顯示的相符元素。

Playwright Inspector and browser

從特定中斷點執行測試

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

page.pause()

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

test with page.pause

即時編輯定位器

在偵錯模式下執行時,您可以即時編輯定位器。在「選取定位器」按鈕旁邊,有一個欄位顯示測試暫停時的 locator。您可以直接在選取定位器欄位中編輯此定位器,並且相符的元素將在瀏覽器視窗中醒目顯示。

live editing locators

選取定位器

偵錯時,您可能需要選擇更具彈性的定位器。您可以透過按一下選取定位器按鈕並將滑鼠懸停在瀏覽器視窗中的任何元素上來執行此操作。將滑鼠懸停在元素上時,您將看到下方醒目顯示的定位該元素所需的程式碼。按一下瀏覽器中的元素會將定位器新增到欄位中,然後您可以在其中調整或複製到您的程式碼中。

Picking locators

Playwright 將查看您的頁面並找出最佳定位器,優先考慮 角色、文字和測試 ID 定位器。如果 Playwright 找到多個與定位器相符的元素,它將改進定位器,使其具有彈性並唯一識別目標元素,因此您不必擔心由於定位器而導致測試失敗。

可操作性日誌

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

Actionability Logs

追蹤檢視器

Playwright 追蹤檢視器 是一個 GUI 工具,可讓您瀏覽已記錄的 Playwright 測試追蹤。您可以向後和向前瀏覽左側的每個動作,並以視覺方式查看動作期間發生的情況。在螢幕中間,您可以看到動作的 DOM 快照。在右側,您可以看到動作詳細資訊,例如時間、參數、傳回值和日誌。您還可以瀏覽主控台訊息、網路請求和原始碼。

若要深入了解如何記錄追蹤並使用追蹤檢視器,請查看 追蹤檢視器 指南。

瀏覽器開發人員工具

當以 `PWDEBUG=console` 在偵錯模式下執行時,`playwright` 物件可在開發人員工具主控台中使用。開發人員工具可以協助您:

  • 檢查 DOM 樹狀結構並尋找元素選取器
  • 查看主控台日誌在執行期間(或學習如何透過 API 讀取日誌
  • 檢查網路活動和其他開發人員工具功能

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

Browser Developer Tools with Playwright object

若要使用瀏覽器開發人員工具偵錯您的測試,請先在您的測試中設定一個中斷點,以使用 page.pause() 方法暫停執行。

page.pause()

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

PWDEBUG=console pytest -s

一旦 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 pytest -s
注意

對於 WebKit:在執行期間啟動 WebKit 檢測器將阻止 Playwright 腳本進一步執行,並將重設預先配置的使用者代理程式和裝置模擬。

有頭模式

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

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

# Chromium, Firefox, or WebKit
chromium.launch(headless=False, slow_mo=100)