跳到主要內容

發行說明

版本 1.49

Aria 快照

新的斷言 expect(locator).to_match_aria_snapshot() 透過與預期的可存取性樹狀結構 (以 YAML 表示) 進行比較來驗證頁面結構。

page.goto("https://playwright.dev.org.tw")
expect(page.locator('body')).to_match_aria_snapshot('''
- banner:
- heading /Playwright enables reliable/ [level=1]
- link "Get started"
- link "Star microsoft/playwright on GitHub"
- main:
- img "Browsers (Chromium, Firefox, WebKit)"
- heading "Any browser • Any platform • One API"
''')

您可以使用測試產生器或呼叫 locator.aria_snapshot() 來產生此斷言。

aria 快照指南中深入瞭解。

追蹤群組

新的方法 tracing.group() 可讓您在追蹤檢視器中以視覺化方式將動作分組。

# All actions between group and group_end
# will be shown in the trace viewer as a group.
page.context.tracing.group("Open Playwright.dev > API")
page.goto("https://playwright.dev.org.tw/")
page.get_by_role("link", name="API").click()
page.context.tracing.group_end()

重大變更:chromemsedge 通道切換至新的無頭模式

如果您在 playwright.config.ts 中使用下列其中一個通道,此變更會影響您

  • chromechrome-devchrome-betachrome-canary
  • msedgemsedge-devmsedge-betamsedge-canary

更新至 Playwright v1.49 後,執行您的測試套件。如果仍然通過,您就可以繼續使用。如果沒有,您可能需要更新您的快照,並調整一些關於 PDF 檢視器和擴充功能的測試程式碼。請參閱 issue #33566 以取得更多詳細資訊。

試用新的 Chromium 無頭模式

您可以使用 'chromium' 通道選擇加入新的無頭模式。正如 官方 Chrome 文件所述

另一方面,新的無頭模式是真正的 Chrome 瀏覽器,因此更真實、更可靠,並提供更多功能。這使其更適合用於高精準度的端對端 Web 應用程式測試或瀏覽器擴充功能測試。

請參閱 issue #33566 以取得您可能遇到的可能中斷清單,以及關於 Chromium 無頭模式的更多詳細資訊。如果您在選擇加入後看到任何問題,請提出 issue。

pytest test_login.py --browser-channel chromium

其他

  • Ubuntu 20.04 和 Debian 11 的 WebKit 將不再有更新。我們建議您將作業系統更新至較新版本。
  • 快照內的 <canvas> 元素現在會繪製預覽。
  • 不再支援 Python 3.8。

瀏覽器版本

  • Chromium 131.0.6778.33
  • Mozilla Firefox 132.0
  • WebKit 18.2

此版本也已針對下列穩定通道進行測試

  • Google Chrome 130
  • Microsoft Edge 130

版本 1.48

WebSocket 路由

新的方法 page.route_web_socket()browser_context.route_web_socket() 允許攔截、修改和模擬頁面中啟動的 WebSocket 連線。以下是一個簡單的範例,透過回應 "request""response" 來模擬 WebSocket 通訊。

def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "request":
ws.send("response")

page.route_web_socket("/ws", lambda ws: ws.on_message(
lambda message: message_handler(ws, message)
))

請參閱 WebSocketRoute 以取得更多詳細資訊。

UI 更新

  • HTML 報告中註解和測試位置的新「複製」按鈕。
  • 路由方法呼叫 (例如 route.fulfill()) 不再顯示在報告和追蹤檢視器中。您可以在網路標籤中看到哪些網路請求被路由。
  • 網路標籤中請求的新「複製為 cURL」和「複製為 fetch」按鈕。

其他

瀏覽器版本

  • Chromium 130.0.6723.19
  • Mozilla Firefox 130.0
  • WebKit 18.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 129
  • Microsoft Edge 129

版本 1.47

網路標籤改進

追蹤檢視器中的網路標籤有幾個不錯的改進

  • 依資產類型和 URL 篩選
  • 更好地顯示查詢字串參數
  • 字型資產預覽

Network tab now has filters

其他

  • mcr.microsoft.com/playwright/python:v1.47.0 現在提供以 Ubuntu 24.04 Noble 為基礎的 Playwright 映像。若要使用以 22.04 jammy 為基礎的映像,請改用 mcr.microsoft.com/playwright/python:v1.47.0-jammy
  • Playwright Docker 映像的 :latest/:focal/:jammy 標籤不再發佈。釘選至特定版本以獲得更好的穩定性和再現性。
  • TLS 用戶端憑證現在可以從記憶體傳遞,方法是將 client_certificates.certclient_certificates.key 作為位元組而不是檔案路徑傳遞。
  • no_wait_afterlocator.select_option() 中已棄用。
  • 我們已看到 WebKit 在 GitHub Actions macos-13 上發生錯誤的報告。我們建議將 GitHub Actions 升級至 macos-14

瀏覽器版本

  • Chromium 129.0.6668.29
  • Mozilla Firefox 130.0
  • WebKit 18.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 128
  • Microsoft Edge 128

版本 1.46

TLS 用戶端憑證

Playwright 現在允許提供用戶端憑證,以便伺服器可以根據 TLS 用戶端驗證的指定來驗證它們。

您可以將用戶端憑證作為 browser.new_context()api_request.new_context() 的參數提供。下列程式碼片段為 https://example.com 設定用戶端憑證

context = browser.new_context(
client_certificates=[
{
"origin": "https://example.com",
"certPath": "client-certificates/cert.pem",
"keyPath": "client-certificates/key.pem",
}
],
)

追蹤檢視器更新

  • 文字附件的內容現在會在附件窗格中內嵌呈現。
  • 新設定可顯示/隱藏路由動作,例如 route.continue_()
  • 請求方法和狀態會顯示在網路詳細資訊標籤中。
  • 新按鈕可將來源檔案位置複製到剪貼簿。
  • 中繼資料窗格現在會顯示 base_url

其他

瀏覽器版本

  • Chromium 128.0.6613.18
  • Mozilla Firefox 128.0
  • WebKit 18.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 127
  • Microsoft Edge 127

版本 1.45

時鐘

利用新的 Clock API 允許在測試中操作和控制時間,以驗證與時間相關的行為。此 API 涵蓋許多常見情境,包括

  • 使用預先定義的時間進行測試;
  • 保持一致的時間和計時器;
  • 監控非活動狀態;
  • 手動逐時滴答。
# Initialize clock with some time before the test time and let the page load
# naturally. `Date.now` will progress as the timers fire.
page.clock.install(time=datetime.datetime(2024, 2, 2, 8, 0, 0))
page.goto("https://127.0.0.1:3333")

# Pretend that the user closed the laptop lid and opened it again at 10am.
# Pause the time once reached that point.
page.clock.pause_at(datetime.datetime(2024, 2, 2, 10, 0, 0))

# Assert the page state.
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:00:00 AM")

# Close the laptop lid again and open it at 10:30am.
page.clock.fast_forward("30:00")
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:30:00 AM")

請參閱 時鐘指南 以取得更多詳細資訊。

其他

  • 方法 locator.set_input_files() 現在支援為 <input type=file webkitdirectory> 元素上傳目錄。

    page.get_by_label("Upload directory").set_input_files('mydir')
  • 多種方法 (例如 locator.click()locator.press()) 現在支援 ControlOrMeta 修飾鍵。此鍵在 macOS 上對應至 Meta,在 Windows 和 Linux 上對應至 Control

    # Press the common keyboard shortcut Control+S or Meta+S to trigger a "Save" operation.
    page.keyboard.press("ControlOrMeta+S")
  • api_request.new_context() 中的新屬性 httpCredentials.send,允許始終傳送 Authorization 標頭,或僅在回應 401 Unauthorized 時傳送。

  • Playwright 現在支援 Ubuntu 24.04 上的 Chromium、Firefox 和 WebKit。

  • v1.45 是最後一個接收 macOS 12 Monterey WebKit 更新的版本。請更新 macOS 以繼續使用最新的 WebKit。

瀏覽器版本

  • Chromium 127.0.6533.5
  • Mozilla Firefox 127.0
  • WebKit 17.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 126
  • Microsoft Edge 126

版本 1.44

新 API

協助工具斷言

定位器處理常式

locator = page.get_by_text("This interstitial covers the button")
page.add_locator_handler(locator, lambda overlay: overlay.locator("#close").click(), times=3, no_wait_after=True)
# Run your tests that can be interrupted by the overlay.
# ...
page.remove_locator_handler(locator)

其他選項

瀏覽器版本

  • Chromium 125.0.6422.14
  • Mozilla Firefox 125.0.1
  • WebKit 17.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 124
  • Microsoft Edge 124

版本 1.43

新 API

  • 方法 browser_context.clear_cookies() 現在支援篩選器,以僅移除某些 Cookie。

    # Clear all cookies.
    context.clear_cookies()
    # New: clear cookies with a particular name.
    context.clear_cookies(name="session-id")
    # New: clear cookies for a particular domain.
    context.clear_cookies(domain="my-origin.com")
  • 新的方法 locator.content_frameLocator 物件轉換為 FrameLocator。當您在某處取得 Locator 物件,稍後想要與框架內的內容互動時,這可能很有用。

    locator = page.locator("iframe[name='embedded']")
    # ...
    frame_locator = locator.content_frame
    frame_locator.getByRole("button").click()
  • 新的方法 frame_locator.ownerFrameLocator 物件轉換為 Locator。當您在某處取得 FrameLocator 物件,稍後想要與 iframe 元素互動時,這可能很有用。

    frame_locator = page.frame_locator("iframe[name='embedded']")
    # ...
    locator = frame_locator.owner
    expect(locator).to_be_visible()
  • Conda 建置現在針對 macOS-arm64 和 Linux-arm64 發佈。

瀏覽器版本

  • Chromium 124.0.6367.8
  • Mozilla Firefox 124.0
  • WebKit 17.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 123
  • Microsoft Edge 123

版本 1.42

新的定位器處理常式

新的方法 page.add_locator_handler() 註冊一個回呼,當指定的元素變成可見時將會叫用該回呼,並且可能會封鎖 Playwright 動作。回呼可以移除覆蓋。以下範例說明如何在 Cookie 對話方塊出現時關閉它。

# Setup the handler.
page.add_locator_handler(
page.get_by_role("heading", name="Hej! You are in control of your cookies."),
lambda: page.get_by_role("button", name="Accept all").click(),
)
# Write the test as usual.
page.goto("https://www.ikea.com/")
page.get_by_role("link", name="Collection of blue and white").click()
expect(page.get_by_role("heading", name="Light and easy")).to_be_visible()

新 API

公告

  • ⚠️ 不再支援 Ubuntu 18。

瀏覽器版本

  • Chromium 123.0.6312.4
  • Mozilla Firefox 123.0
  • WebKit 17.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 122
  • Microsoft Edge 123

版本 1.41

新 API

瀏覽器版本

  • Chromium 121.0.6167.57
  • Mozilla Firefox 121.0
  • WebKit 17.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 120
  • Microsoft Edge 120

版本 1.40

測試產生器更新

Playwright Test Generator

產生斷言的新工具

以下是包含斷言的已產生測試範例

from playwright.sync_api import Page, expect

def test_example(page: Page) -> None:
page.goto("https://playwright.dev.org.tw/")
page.get_by_role("link", name="Get started").click()
expect(page.get_by_label("Breadcrumbs").get_by_role("list")).to_contain_text("Installation")
expect(page.get_by_label("Search")).to_be_visible()
page.get_by_label("Search").click()
page.get_by_placeholder("Search docs").fill("locator")
expect(page.get_by_placeholder("Search docs")).to_have_value("locator");

新 API

其他變更

  • 方法 download.path() 會針對失敗和已取消的下載擲回錯誤。

瀏覽器版本

  • Chromium 120.0.6099.28
  • Mozilla Firefox 119.0
  • WebKit 17.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 119
  • Microsoft Edge 119

版本 1.39

Evergreen 瀏覽器更新。

瀏覽器版本

  • Chromium 119.0.6045.9
  • Mozilla Firefox 118.0.1
  • WebKit 17.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 118
  • Microsoft Edge 118

版本 1.38

追蹤檢視器更新

Playwright Trace Viewer

  1. 縮放至時間範圍。
  2. 重新設計網路面板。

新 API

已棄用

瀏覽器版本

  • Chromium 117.0.5938.62
  • Mozilla Firefox 117.0
  • WebKit 17.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 116
  • Microsoft Edge 116

版本 1.37

重點

📚 Debian 12 Bookworm 支援

Playwright 現在支援 x86_64 和 arm64 上適用於 Chromium、Firefox 和 WebKit 的 Debian 12 Bookworm。如果您遇到任何問題,請告訴我們!

Linux 支援看起來像這樣

Ubuntu 20.04Ubuntu 22.04Debian 11Debian 12
Chromium
WebKit
Firefox

瀏覽器版本

  • Chromium 116.0.5845.82
  • Mozilla Firefox 115.0
  • WebKit 17.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 115
  • Microsoft Edge 115

版本 1.36

🏝️ 夏季維護版本。

瀏覽器版本

  • Chromium 115.0.5790.75
  • Mozilla Firefox 115.0
  • WebKit 17.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 114
  • Microsoft Edge 114

版本 1.35

重點

  • 方法 page.screenshot()locator.screenshot() 的新選項 mask_color 可變更預設遮罩顏色。

  • 新的 uninstall CLI 命令可解除安裝瀏覽器二進位檔

    $ playwright uninstall # remove browsers installed by this installation
    $ playwright uninstall --all # remove all ever-install Playwright browsers

瀏覽器版本

  • Chromium 115.0.5790.13
  • Mozilla Firefox 113.0
  • WebKit 16.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 114
  • Microsoft Edge 114

版本 1.34

重點

瀏覽器版本

  • Chromium 114.0.5735.26
  • Mozilla Firefox 113.0
  • WebKit 16.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 113
  • Microsoft Edge 113

版本 1.33

定位器更新

  • 使用 locator.or_() 建立符合兩個定位器中任一個的定位器。考慮一個您想要按一下「新電子郵件」按鈕的情境,但有時會改為顯示安全性設定對話方塊。在這種情況下,您可以等待「新電子郵件」按鈕或對話方塊,並採取相應的動作

    new_email = page.get_by_role("button", name="New email")
    dialog = page.get_by_text("Confirm security settings")
    expect(new_email.or_(dialog)).is_visible()
    if (dialog.is_visible()):
    page.get_by_role("button", name="Dismiss").click()
    new_email.click()
  • locator.filter() 中使用新的選項 has_nothas_not_text,以尋找不符合特定條件的元素。

    row_locator = page.locator("tr")
    row_locator.filter(has_not_text="text in column 1").filter(
    has_not=page.get_by_role("button", name="column 2 button")
    ).screenshot()
  • 使用新的 Web 優先斷言 expect(locator).to_be_attached(),以確保元素存在於頁面的 DOM 中。請勿與 expect(locator).to_be_visible() 混淆,後者確保元素已附加且可見。

新 API

⚠️ 重大變更

  • mcr.microsoft.com/playwright/python:v1.33.0 現在提供以 Ubuntu Jammy 為基礎的 Playwright 映像。若要使用以 focal 為基礎的映像,請改用 mcr.microsoft.com/playwright/python:v1.33.0-focal

瀏覽器版本

  • Chromium 113.0.5672.53
  • Mozilla Firefox 112.0
  • WebKit 16.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 112
  • Microsoft Edge 112

版本 1.32

新 API

瀏覽器版本

  • Chromium 112.0.5615.29
  • Mozilla Firefox 111.0
  • WebKit 16.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 111
  • Microsoft Edge 111

版本 1.31

新 API

  • 新的斷言 expect(locator).to_be_in_viewport() 確保定位器指向的元素與視窗範圍相交,根據 Intersection Observer API

    from playwright.sync_api import expect

    locator = page.get_by_role("button")

    # Make sure at least some part of element intersects viewport.
    expect(locator).to_be_in_viewport()

    # Make sure element is fully outside of viewport.
    expect(locator).not_to_be_in_viewport()

    # Make sure that at least half of the element intersects viewport.
    expect(locator).to_be_in_viewport(ratio=0.5)

其他

  • 追蹤檢視器中的 DOM 快照現在可以在個別視窗中開啟。
  • 方法 route.fetch() 的新選項 max_redirects
  • Playwright 現在支援 Debian 11 arm64。
  • 官方 docker 映像 現在包含 Node 18 而不是 Node 16。

瀏覽器版本

  • Chromium 111.0.5563.19
  • Mozilla Firefox 109.0
  • WebKit 16.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 110
  • Microsoft Edge 110

版本 1.30

瀏覽器版本

  • Chromium 110.0.5481.38
  • Mozilla Firefox 108.0.2
  • WebKit 16.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 109
  • Microsoft Edge 109

版本 1.29

新 API

  • 新方法 route.fetch() 以及 route.fulfill() 的新選項 json

    def handle_route(route: Route):
    # Fetch original settings.
    response = route.fetch()

    # Force settings theme to a predefined value.
    json = response.json()
    json["theme"] = "Solorized"

    # Fulfill with modified data.
    route.fulfill(json=json)


    page.route("**/api/settings", handle_route)
  • 新方法 locator.all(),用於迭代所有符合條件的元素

    # Check all checkboxes!
    checkboxes = page.get_by_role("checkbox")
    for checkbox in checkboxes.all():
    checkbox.check()
  • locator.select_option() 現在可以透過 value 或 label 進行匹配

    <select multiple>
    <option value="red">Red</div>
    <option value="green">Green</div>
    <option value="blue">Blue</div>
    </select>
    element.select_option("Red")

其他

瀏覽器版本

  • Chromium 109.0.5414.46
  • Mozilla Firefox 107.0
  • WebKit 16.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 108
  • Microsoft Edge 108

版本 1.28

Playwright 工具

  • CodeGen 中的即時 Locator。 使用「Explore」工具為頁面上的任何元素產生 locator。

Locator Explorer

新 API

瀏覽器版本

  • Chromium 108.0.5359.29
  • Mozilla Firefox 106.0
  • WebKit 16.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 107
  • Microsoft Edge 107

版本 1.27

Locators

有了這些新的 API,編寫 locator 成為一種樂趣

page.get_by_label("User Name").fill("John")

page.get_by_label("Password").fill("secret-password")

page.get_by_role("button", name="Sign in").click()

expect(page.get_by_text("Welcome, John!")).to_be_visible()

所有相同的方法也適用於 LocatorFrameLocatorFrame 類別。

其他重點

  • 如同在 v1.25 中宣布,Ubuntu 18 將自 2022 年 12 月起停止支援。除此之外,從下一個 Playwright 版本開始,Ubuntu 18 上將不再有 WebKit 更新。

行為變更

  • expect(locator).to_have_attribute() 搭配空值時,不再匹配遺失的屬性。例如,當 button 沒有 disabled 屬性時,以下程式碼片段將會成功。

    expect(page.get_by_role("button")).to_have_attribute("disabled", "")

瀏覽器版本

  • Chromium 107.0.5304.18
  • Mozilla Firefox 105.0.1
  • WebKit 16.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 106
  • Microsoft Edge 106

版本 1.26

斷言

其他重點

  • api_request_context.get() 和其他方法的新選項 max_redirects,用於限制重定向計數。
  • 現在支援 Python 3.11。

行為變更

許多 Playwright API 已經支援 wait_until: "domcontentloaded" 選項。例如

page.goto("https://playwright.dev.org.tw", wait_until="domcontentloaded")

在 1.26 之前,這會等待所有 iframe 觸發 DOMContentLoaded 事件。

為了與網路規範保持一致,'domcontentloaded' 值僅等待目標 frame 觸發 'DOMContentLoaded' 事件。使用 wait_until="load" 來等待所有 iframe。

瀏覽器版本

  • Chromium 106.0.5249.30
  • Mozilla Firefox 104.0
  • WebKit 16.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 105
  • Microsoft Edge 105

版本 1.25

公告

  • 🎁 我們現在發布 Ubuntu 22.04 Jammy Jellyfish docker 映像檔:mcr.microsoft.com/playwright/python:v1.34.0-jammy
  • 🪦 這是最後一個支援 macOS 10.15 的版本(自 1.21 起已棄用)。
  • ⚠️ Ubuntu 18 現在已棄用,並將自 2022 年 12 月起停止支援。

瀏覽器版本

  • Chromium 105.0.5195.19
  • Mozilla Firefox 103.0
  • WebKit 16.0

此版本也已針對下列穩定通道進行測試

  • Google Chrome 104
  • Microsoft Edge 104

版本 1.24

🐂 Debian 11 Bullseye 支援

Playwright 現在在 x86_64 上支援 Debian 11 Bullseye,適用於 Chromium、Firefox 和 WebKit。如果您遇到任何問題,請告訴我們!

Linux 支援看起來像這樣

| | Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | :--- | :---: | :---: | :---: | :---: | | Chromium | ✅ | ✅ | ✅ | | WebKit | ✅ | ✅ | ✅ | | Firefox | ✅ | ✅ | ✅ |

新的介紹文件

我們重寫了「開始使用」文件,使其更著重於端對端測試。請在 playwright.dev 上查看。

版本 1.23

網路重播

現在您可以將網路流量記錄到 HAR 檔案中,並在測試中重複使用此流量。

將網路記錄到 HAR 檔案中

npx playwright open --save-har=github.har.zip https://github.com/microsoft

或者,您可以透過程式碼記錄 HAR

context = browser.new_context(record_har_path="github.har.zip")
# ... do stuff ...
context.close()

使用新方法 page.route_from_har()browser_context.route_from_har()HAR 檔案提供匹配的回應

context.route_from_har("github.har.zip")

我們的文件中閱讀更多內容。

進階路由

您現在可以使用 route.fallback() 將路由延遲到其他處理常式。

請考慮以下範例

# Remove a header from all requests
def remove_header_handler(route: Route) -> None:
headers = route.request.all_headers()
if "if-none-match" in headers:
del headers["if-none-match"]
route.fallback(headers=headers)

page.route("**/*", remove_header_handler)

# Abort all images
def abort_images_handler(route: Route) -> None:
if route.request.resource_type == "image":
route.abort()
else:
route.fallback()

page.route("**/*", abort_images_handler)

請注意,新方法 page.route_from_har()browser_context.route_from_har() 也參與路由,並且可以延遲處理。

Web-First 斷言更新

其他

  • 如果 service worker 阻礙了您的操作,您現在可以使用新的 context 選項 service_workers 輕鬆停用它

    context = browser.new_context(service_workers="block")
    page = context.new_page()
  • recordHar context 選項使用 .zip 路徑會自動壓縮產生的 HAR

    context = browser.new_context(record_har_path="github.har.zip")
  • 如果您打算手動編輯 HAR,請考慮使用 "minimal" HAR 記錄模式,該模式僅記錄重播所需的基本資訊

    context = browser.new_context(record_har_mode="minimal", record_har_path="har.har")
  • Playwright 現在可以在 Ubuntu 22 amd64 和 Ubuntu 22 arm64 上執行。

版本 1.22

重點

  • 角色選取器,允許透過 ARIA roleARIA 屬性可存取名稱 選取元素。

    # Click a button with accessible name "log in"
    page.locator("role=button[name='log in']").click()

    我們的文件中閱讀更多內容。

  • 新的 locator.filter() API,用於篩選現有的 locator

    buttons = page.locator("role=button")
    # ...
    submit_button = buttons.filter(has_text="Submit")
    submit_button.click()
  • Codegen 現在支援產生 Pytest 測試

    Graphics

版本 1.21

重點

  • 新的角色選取器,允許透過 ARIA roleARIA 屬性可存取名稱 選取元素。

    # Click a button with accessible name "log in"
    page.locator("role=button[name='log in']").click()

    我們的文件中閱讀更多內容。

  • page.screenshot() 中的新選項 scale,用於縮小螢幕截圖尺寸。

  • page.screenshot() 中的新選項 caret,用於控制文字游標。預設為 "hide"

行為變更

  • mcr.microsoft.com/playwright docker 映像檔不再包含 Python。請使用 mcr.microsoft.com/playwright/python 作為預先安裝 Python 的 Playwright-ready docker 映像檔。
  • Playwright 現在透過 locator.set_input_files() API 支援大型檔案上傳(數百 MB)。

瀏覽器版本

  • Chromium 101.0.4951.26
  • Mozilla Firefox 98.0.2
  • WebKit 15.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 100
  • Microsoft Edge 100

版本 1.20

重點

公告

  • 我們現在發布指定的 Python docker 映像檔 mcr.microsoft.com/playwright/python。如果您使用 Python,請切換到此映像檔。這是最後一個在我們的 javascript mcr.microsoft.com/playwright docker 映像檔中包含 Python 的版本。
  • v1.20 是最後一個接收 macOS 10.15 Catalina WebKit 更新的版本。請更新 macOS 以繼續使用最新和最棒的 WebKit!

瀏覽器版本

  • Chromium 101.0.4921.0
  • Mozilla Firefox 97.0.1
  • WebKit 15.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 99
  • Microsoft Edge 99

版本 1.19

重點

  • Locator 現在支援 has 選項,以確保它包含另一個 locator 在內部

    page.locator("article", has=page.locator(".highlight")).click()

    locator 文件中閱讀更多內容

  • 新的 locator.page

  • page.screenshot()locator.screenshot() 現在會自動隱藏閃爍的游標

  • Playwright Codegen 現在產生 locators 和 frame locators

瀏覽器版本

  • Chromium 100.0.4863.0
  • Mozilla Firefox 96.0.1
  • WebKit 15.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 98
  • Microsoft Edge 98

版本 1.18

API 測試

Playwright for Python 1.18 引入了新的 API 測試,讓您可以直接從 Python 向伺服器發送請求!現在您可以

  • 測試您的伺服器 API
  • 在測試中造訪 Web 應用程式之前,準備伺服器端狀態
  • 在瀏覽器中執行某些操作後,驗證伺服器端後置條件

若要代表 Playwright Page 執行請求,請使用新的 page.request API

# Do a GET request on behalf of page
res = page.request.get("http://example.com/foo.json")

我們的文件中閱讀更多內容。

Web-First 斷言

Playwright for Python 1.18 引入了 Web-First 斷言

請考慮以下範例

from playwright.sync_api import Page, expect

def test_status_becomes_submitted(page: Page) -> None:
# ..
page.locator("#submit-button").click()
expect(page.locator(".status")).to_have_text("Submitted")

Playwright 將重新測試具有選取器 .status 的節點,直到擷取的 Node 具有 "Submitted" 文字。它將重新擷取節點並一遍又一遍地檢查,直到滿足條件或達到逾時時間。您可以將此逾時時間作為選項傳遞。

我們的文件中閱讀更多內容。

Locator 改善

  • locator.drag_to()

  • 現在可以選擇性地依據 locator 包含的文字來篩選每個 locator

    page.locator("li", has_text="my item").locator("button").click()

    locator 文件中閱讀更多內容

新 API 和變更

瀏覽器版本

  • Chromium 99.0.4812.0
  • Mozilla Firefox 95.0
  • WebKit 15.4

此版本也已針對下列穩定通道進行測試

  • Google Chrome 97
  • Microsoft Edge 97

版本 1.17

Frame Locators

Playwright 1.17 引入了 frame locators - 頁面上 iframe 的 locator。Frame locators 擷取足以擷取 iframe,然後在該 iframe 中定位元素的邏輯。Frame locators 預設為嚴格模式,將等待 iframe 出現,並且可以在 Web-First 斷言中使用。

Graphics

可以使用 page.frame_locator()locator.frame_locator() 方法建立 Frame locators。

locator = page.frame_locator("my-frame").locator("text=Submit")
locator.click()

我們的文件中閱讀更多資訊。

Trace Viewer 更新

Playwright Trace Viewer 現在可在 https://trace.playwright.dev線上使用!只需拖放您的 trace.zip 檔案即可檢查其內容。

注意:追蹤檔案不會上傳到任何地方;trace.playwright.dev 是一個 漸進式 Web 應用程式,可在本機處理追蹤。

  • Playwright Test 追蹤現在預設包含原始碼(可以使用追蹤選項關閉這些原始碼)
  • Trace Viewer 現在顯示測試名稱
  • 新的追蹤中繼資料標籤,包含瀏覽器詳細資訊
  • 快照現在具有 URL 列

image

HTML 報告更新

  • HTML 報告現在支援動態篩選
  • 報告現在是單一靜態 HTML 檔案,可以透過電子郵件或作為 slack 附件發送。

image

Ubuntu ARM64 支援 + 更多

  • Playwright 現在支援 Ubuntu 20.04 ARM64。您現在可以在 Apple M1 和 Raspberry Pi 上的 Docker 內執行 Playwright 測試。

  • 您現在可以使用 Playwright 在 Linux 上安裝穩定版本的 Edge

    npx playwright install msedge

新 API

  • Tracing 現在支援 'title' 選項
  • Page 導航支援新的 'commit' 等待選項

版本 1.16

🎭 Playwright 程式庫

locator.wait_for

等待 locator 解析為具有給定狀態的單一元素。預設為 state: 'visible'

在處理清單時特別方便

order_sent = page.locator("#order-sent")
order_sent.wait_for()

閱讀關於 locator.wait_for() 的更多資訊。

Arm64 的 Docker 支援

Playwright Docker 映像檔現在已針對 Arm64 發布,因此可以在 Apple Silicon 上使用。

閱讀關於 Docker 整合的更多資訊。

🎭 Playwright Trace Viewer

  • 使用 npx playwright show-trace 執行 trace viewer,並將追蹤檔案拖放到 trace viewer PWA
  • 更好地視覺化呈現動作目標

閱讀關於 Trace Viewer的更多資訊。

瀏覽器版本

  • Chromium 97.0.4666.0
  • Mozilla Firefox 93.0
  • WebKit 15.4

此版本的 Playwright 也針對以下穩定管道進行了測試

  • Google Chrome 94
  • Microsoft Edge 94

版本 1.15

🖱️ 滑鼠滾輪

透過使用 mouse.wheel(),您現在可以垂直或水平滾動。

📜 新的 Headers API

以前無法取得回應的多個標頭值。現在可以實現此功能,並且提供其他輔助函數

🌈 強制色彩模擬

現在可以透過在 browser.new_context() 中傳遞或呼叫 page.emulate_media() 來模擬 forced-colors CSS 媒體功能。

新 API

瀏覽器版本

  • Chromium 96.0.4641.0
  • Mozilla Firefox 92.0
  • WebKit 15.0

版本 1.14

⚡️ 新的「strict」模式

選取器歧義是自動化測試中的常見問題。「strict」模式可確保您的選取器指向單一元素,否則會擲回錯誤。

strict=true 傳遞到您的動作呼叫中以選擇加入。

# This will throw if you have more than one button!
page.click("button", strict=True)

📍 新的 Locators API

Locator 代表頁面上元素(們)的檢視。它擷取足以在任何給定時刻擷取元素的邏輯。

LocatorElementHandle 之間的差異在於後者指向特定元素,而 Locator 擷取如何擷取該元素的邏輯。

此外,locators 預設為「strict」模式

locator = page.locator("button")
locator.click()

文件中了解更多資訊。

🧩 實驗性的 ReactVue 選取器引擎

React 和 Vue 選取器允許透過其元件名稱和/或屬性值來選取元素。語法與 屬性選取器 非常相似,並且支援所有屬性選取器運算子。

page.locator("_react=SubmitButton[enabled=true]").click()
page.locator("_vue=submit-button[enabled=true]").click()

react 選取器文件vue 選取器文件中了解更多資訊。

✨ 新的 nthvisible 選取器引擎

  • nth 選取器引擎等同於 :nth-match 偽類別,但可以與其他選取器引擎結合使用。
  • visible 選取器引擎等同於 :visible 偽類別,但可以與其他選取器引擎結合使用。
# select the first button among all buttons
button.click("button >> nth=0")
# or if you are using locators, you can use first, nth() and last
page.locator("button").first.click()

# click a visible button
button.click("button >> visible=true")

瀏覽器版本

  • Chromium 94.0.4595.0
  • Mozilla Firefox 91.0
  • WebKit 15.0

版本 1.13

Playwright

工具

  • Playwright Trace Viewer 現在顯示參數、傳回值和 console.log() 呼叫。

新的和經過修改的指南

瀏覽器版本

  • Chromium 93.0.4576.0
  • Mozilla Firefox 90.0
  • WebKit 14.2

新的 Playwright API

版本 1.12

🧟‍♂️ 隆重介紹 Playwright Trace Viewer

Playwright Trace Viewer 是一個新的 GUI 工具,可協助您在腳本執行後探索錄製的 Playwright 追蹤。Playwright 追蹤讓您可以檢查

  • 每個 Playwright 動作前後的頁面 DOM
  • 每個 Playwright 動作前後的頁面渲染
  • 腳本執行期間的瀏覽器網路

追蹤是使用新的 browser_context.tracing API 錄製的

browser = chromium.launch()
context = browser.new_context()

# Start tracing before creating / navigating a page.
context.tracing.start(screenshots=True, snapshots=True)

page.goto("https://playwright.dev.org.tw")

# Stop tracing and export it into a zip archive.
context.tracing.stop(path = "trace.zip")

追蹤稍後使用 Playwright CLI 檢查

playwright show-trace trace.zip

這將打開以下 GUI

image

👉 在追蹤檢視器文件中閱讀更多資訊。

瀏覽器版本

  • Chromium 93.0.4530.0
  • Mozilla Firefox 89.0
  • WebKit 14.2

此版本的 Playwright 也針對以下穩定管道進行了測試

  • Google Chrome 91
  • Microsoft Edge 91

新 API

版本 1.11

🎥 新影片:Playwright: A New Test Automation Framework for the Modern Web (投影片)

  • 我們談論了 Playwright
  • 展示了幕後的工程工作
  • 進行了新功能的現場演示 ✨
  • 特別感謝 applitools 主辦這次活動並邀請我們!

瀏覽器版本

  • Chromium 92.0.4498.0
  • Mozilla Firefox 89.0b6
  • WebKit 14.2

新 API

版本 1.10

捆綁的瀏覽器版本

  • Chromium 90.0.4430.0
  • Mozilla Firefox 87.0b10
  • WebKit 14.2

此版本的 Playwright 也針對以下穩定管道進行了測試

  • Google Chrome 89
  • Microsoft Edge 89

新 API

版本 1.9

  • Playwright Inspector 是一個新的 GUI 工具,用於編寫和偵錯您的測試。
    • 逐行偵錯您的 Playwright 腳本,具有播放、暫停和逐步執行功能。
    • 透過錄製使用者動作來編寫新的腳本。
    • 透過將滑鼠懸停在元素上,為您的腳本產生元素選擇器
    • 設定 PWDEBUG=1 環境變數以啟動 Inspector
  • 在 Headed 模式下使用 page.pause() 暫停腳本執行。暫停頁面會啟動 Playwright Inspector 以進行偵錯。
  • CSS 選擇器的新has-text 偽類別:has-text("example") 匹配任何在內部某處(可能在子元素或後代元素中)包含 "example" 的元素。請參閱更多範例
  • 除非配置了 dialog 事件的監聽器,否則頁面對話框現在會在執行期間自動關閉了解更多關於此資訊。
  • Playwright for Python 現已穩定,具有慣用的蛇底式命名 API 和預先建立的 Docker 映像,可在 CI/CD 中運行測試。

瀏覽器版本

  • Chromium 90.0.4421.0
  • Mozilla Firefox 86.0b10
  • WebKit 14.1

新 API

版本 1.8

新 API

瀏覽器版本

  • Chromium 90.0.4392.0
  • Mozilla Firefox 85.0b5
  • WebKit 14.1

版本 1.7

  • 新的 Java SDKPlaywright for Java 現在與 JavaScriptPython.NET bindings 並駕齊驅。
  • 瀏覽器儲存 API:新的便捷 API,用於儲存和載入瀏覽器儲存狀態(cookies、本機儲存),以簡化使用身份驗證的自動化場景。
  • 新的 CSS 選擇器:我們聽取了您對更靈活選擇器的回饋,並修改了選擇器實作。Playwright 1.7 引入了 新的 CSS 擴展,並且即將推出更多。
  • 新網站playwright.dev 的文件網站已更新,現在使用 Docusaurus 構建。
  • 支援 Apple Silicon:WebKit 和 Chromium 的 Playwright 瀏覽器二進制文件現在是為 Apple Silicon 建構的。

新 API

瀏覽器版本

  • Chromium 89.0.4344.0
  • Mozilla Firefox 84.0b9
  • WebKit 14.1