Playwright 是一個用於 Web 測試和自動化的框架。它允許使用單一 API 測試 Chromium、Firefox 和 WebKit。 Playwright 旨在實現常青、強大、可靠且快速的跨瀏覽器 Web 自動化。
Linux | macOS | 視窗 | |
---|---|---|---|
鉻131.0.6778.33 | ✅ | ✅ | ✅ |
網路工具包 18.0 | ✅ | ✅ | ✅ |
火狐瀏覽器132.0 | ✅ | ✅ | ✅ |
所有平台上的所有瀏覽器都支援無頭執行。查看系統需求以了解詳細資訊。
正在尋找 Python、.NET 或 Java 的 Playwright?
Playwright 有自己的端到端測試的測試執行器,我們稱之為 Playwright Test。
開始使用 Playwright Test 最簡單的方法是執行 init 指令。
# Run from your project's root directory
npm init playwright@latest
# Or create a new project
npm init playwright@latest new-project
這將建立一個設定文件,可以選擇新增範例、GitHub Action 工作流程和第一個測試 example.spec.ts。現在您可以直接跳到編寫斷言部分。
新增依賴並安裝瀏覽器。
npm i -D @playwright/test
# install supported browsers
npx playwright install
您可以選擇僅安裝選定的瀏覽器,請參閱安裝瀏覽器以了解更多詳細資訊。或者您可以根本不安裝瀏覽器並使用現有的瀏覽器通道。
自動等待。劇作家在執行操作之前等待元素可操作。它還具有豐富的內省活動。兩者的結合消除了人為超時的需要——這是造成不穩定測試的主要原因。
網路優先的斷言。劇作家斷言是專門為動態網路創建的。檢查會自動重試,直到滿足必要的條件。
追踪。配置測試重試策略,擷取執行追蹤、視訊和螢幕截圖以消除碎片。
瀏覽器在不同的流程中執行屬於不同來源的網頁內容。 Playwright 與現代瀏覽器的架構保持一致,並在進程外執行測試。這使得 Playwright 擺脫了典型的進程內測試運行器限制。
多重一切。跨越多個選項卡、多個來源和多個使用者的測試場景。為不同的使用者建立具有不同上下文的場景,並在您的伺服器上運行它們,所有這些都在一次測試中完成。
可信事件。懸停元素、與動態控制項互動並產生可信事件。 Playwright 使用與真實使用者無法區分的真實瀏覽器輸入管道。
測試框架,穿透 Shadow DOM。劇作家選擇器穿透 Shadow DOM 並允許無縫輸入幀。
瀏覽器上下文。 Playwright 為每個測試建立一個瀏覽器上下文。瀏覽器上下文相當於一個全新的瀏覽器設定檔。這提供了零開銷的完整測試隔離。建立新的瀏覽器上下文只需幾毫秒。
登入一次。保存上下文的身份驗證狀態並在所有測試中重複使用它。這繞過了每個測試中的重複登入操作,但提供了獨立測試的完全隔離。
代碼生成器。透過記錄您的操作來產生測試。將它們儲存為任何語言。
劇作家監察員。檢查頁面、產生選擇器、逐步執行測試執行、查看點擊點並探索執行日誌。
追蹤查看器。捕獲所有資訊以調查測試失敗。 Playwright 追蹤包含測試執行截圖、即時 DOM 快照、動作資源管理器、測試來源等等。
正在尋找 TypeScript、JavaScript、Python、.NET 或 Java 的 Playwright?
若要了解如何執行這些 Playwright 測試範例,請查看我們的入門文件。
此程式碼片段導覽至 Playwright 主頁並儲存螢幕截圖。
import { test } from '@playwright/test' ;
test ( 'Page Screenshot' , async ( { page } ) => {
await page . goto ( 'https://playwright.dev/' ) ;
await page . screenshot ( { path : `example.png` } ) ;
} ) ;
此程式碼片段在給定地理位置的裝置上模擬 Mobile Safari,導航至maps.google.com,執行操作並截取螢幕截圖。
import { test , devices } from '@playwright/test' ;
test . use ( {
... devices [ 'iPhone 13 Pro' ] ,
locale : 'en-US' ,
geolocation : { longitude : 12.492507 , latitude : 41.889938 } ,
permissions : [ 'geolocation' ] ,
} )
test ( 'Mobile and geolocation' , async ( { page } ) => {
await page . goto ( 'https://maps.google.com' ) ;
await page . getByText ( 'Your location' ) . click ( ) ;
await page . waitForRequest ( / .*preview/pwa / ) ;
await page . screenshot ( { path : 'colosseum-iphone.png' } ) ;
} ) ;
此程式碼片段導覽至 example.com,並在頁面上下文中執行腳本。
import { test } from '@playwright/test' ;
test ( 'Evaluate in browser context' , async ( { page } ) => {
await page . goto ( 'https://www.example.com/' ) ;
const dimensions = await page . evaluate ( ( ) => {
return {
width : document . documentElement . clientWidth ,
height : document . documentElement . clientHeight ,
deviceScaleFactor : window . devicePixelRatio
}
} ) ;
console . log ( dimensions ) ;
} ) ;
此程式碼片段為頁面設定請求路由以記錄所有網路請求。
import { test } from '@playwright/test' ;
test ( 'Intercept network requests' , async ( { page } ) => {
// Log and continue all network requests
await page . route ( '**' , route => {
console . log ( route . request ( ) . url ( ) ) ;
route . continue ( ) ;
} ) ;
await page . goto ( 'http://todomvc.com' ) ;
} ) ;