發行說明
版本 1.47
Network 頁籤改進
追蹤檢視器中的 Network 分頁有幾個不錯的改進:
- 按資產類型和 URL 過濾
- 更好地顯示查詢字串參數
- 字體資產預覽
雜項
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
。- 現在可以通過將
cert
和key
以位元組形式傳遞來從記憶體中傳遞 TLS 用戶端證書,而不是文件路徑。 - locator.select_option() 中的
no_wait_after
已被棄用。 - 我們收到報告稱 WebGL 在 GitHub Actions 的
macos-13
上的 Webkit 表現異常。我們建議將 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 Client Certificates
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_()。
- 在網路詳細資訊標籤中顯示請求方法和狀態。
- 新增按鈕以將來源檔案位置複製到剪貼簿。
- Metadata 窗格現在顯示
base_url
。
雜項
- 新的
maxRetries
選項在 api_request_context.fetch() 中,當ECONNRESET
網路錯誤時重試。
瀏覽器版本
- 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("http://localhost: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
。# 按下常見的鍵盤快捷鍵 Control+S 或 Meta+S 來觸發 "Save" 操作。
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
無障礙聲明
-
expect(locator).to_have_accessible_name() 檢查元素是否具有指定的可訪問名稱:
locator = page.get_by_role("button")
expect(locator).to_have_accessible_name("Submit") -
expect(locator).to_have_accessible_description() 檢查元素是否具有指定的可訪問描述:
locator = page.get_by_role("button")
expect(locator).to_have_accessible_description("Upload a photo") -
expect(locator).to_have_role() 檢查元素是否具有指定的 ARIA 角色:
locator = page.get_by_test_id("save-button")
expect(locator).to_have_role("button")
定位器處理程式
- 在執行使用 page.add_locator_handler() 添加的處理器後,Playwright 現在會等待觸發處理器的覆蓋層不再可見。你可以使用新的
no_wait_after
選項來選擇不使用此行為。 - 你可以在 page.add_locator_handler() 中使用新的
times
選項來指定處理器應該執行的最大次數。 - page.add_locator_handler() 中的處理器現在接受定位器作為參數。
- 新的 page.remove_locator_handler() 方法用於移除先前添加的定位器處理器。
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)
其他選項
- expect(page).to_have_url() 現在支援
ignore_case
option。
瀏覽器版本
- 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 現在支援過濾器來僅移除某些 cookies。
# 清除所有 cookies。
context.clear_cookies()
# 新增: 清除具有特定名稱的 cookies。
context.clear_cookies(name="session-id")
# 新增: 清除特定域名的 cookies。
context.clear_cookies(domain="my-origin.com") -
新方法 locator.content_frame 將 Locator 物件轉換為 FrameLocator。這在您已獲得 Locator 物件,並且稍後想與框架內的內容互動時非常有用。
locator = page.locator("iframe[name='embedded']")
# ...
frame_locator = locator.content_frame
frame_locator.getByRole("button").click() -
新方法 frame_locator.owner 將 FrameLocator 物件轉換為 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
- page.pdf 接受兩個新選項
tagged
和outline
。
公告
- ⚠️ Ubuntu 18 已不再支援。
瀏覽器版本
- Chromium 123.0.6312.4
- Mozilla Firefox 123.0
- WebKit 17.4
此版本也針對以下穩定頻道進行了測試:
- Google Chrome 122
- Microsoft Edge 123
版本 1.41
新的 API
- 新方法 page.unroute_all() 移除所有由 page.route() 和 page.route_from_har() 註冊的路由。可選擇等待正在進行的路由完成,或忽略它們的任何錯誤。
- 新方法 browser_context.unroute_all() 移除所有由 browser_context.route() 和 browser_context.route_from_har() 註冊的路由。可選擇等待正在進行的路由完成,或忽略它們的任何錯誤。
- 新選項
style
在 page.screenshot() 和 locator.screenshot() 中,在截圖前添加自訂 CSS 到頁面。
瀏覽器版本
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
此版本也針對以下穩定頻道進行了測試:
- Google Chrome 120
- Microsoft Edge 120
版本 1.40
測試程式碼產生器更新
產生斷言的新工具:
- "Assert visibility" 工具生成 expect(locator).to_be_visible()。
- "Assert value" 工具生成 expect(locator).to_have_value()。
- "Assert text" 工具生成 expect(locator).to_contain_text()。
這裡是一個帶有斷言的生成測試範例:
from playwright.sync_api import Page, expect
def test_example(page: Page) -> None:
page.goto("https://playwright.dev/")
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
- 選項
reason
在 page.close(), browser_context.close() 和 browser.close()。關閉原因會報告所有因關閉而中斷的操作。 - 選項
firefox_user_prefs
在 browser_type.launch_persistent_context()。
其他變更
- 函式 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
追蹤檢視器更新
- 放大時間範圍。
- 網路面板重新設計。
新的 API
棄用
- 以下方法已被棄用: page.type(), frame.type(), locator.type() 和 element_handle.type()。請改用 locator.fill(),速度更快。只有在頁面上有特殊鍵盤處理並且需要逐個按鍵時,才使用 locator.press_sequentially()。
瀏覽器版本
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
此版本也針對以下穩定頻道進行了測試:
- Google Chrome 116
- Microsoft Edge 116
版本 1.37
重點
- 新的 --full-page-screenshot 命令列標誌允許在失敗時截取整頁截圖。
- 現在可以使用 browser_context_args 標記覆蓋單個測試的上下文選項。
pytest-playwright
現在也發佈在 Anaconda。
📚 Debian 12 Bookworm 支援
Playwright 現在支援 Debian 12 Bookworm(x86_64 和 arm64)上的 Chromium、Firefox 和 WebKit。如遇到任何問題,請告訴我們!
Linux 支援看起來像這樣:
Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | Debian 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
重點
-
新選項
mask_color
用於方法 page.screenshot() 和 locator.screenshot() 來改變預設的遮罩顏色。 -
新的
uninstall
CLI 指令來卸載瀏覽器二進位檔:$ playwright uninstall # 移除此安裝所安裝的瀏覽器
$ playwright uninstall --all # 移除所有曾經安裝的 Playwright 瀏覽器
瀏覽器版本
- Chromium 115.0.5790.13
- Mozilla Firefox 113.0
- WebKit 16.4
此版本也針對以下穩定頻道進行了測試:
- Google Chrome 114
- Microsoft Edge 114
版本 1.34
重點
-
新的 locator.and_() 建立一個同時匹配兩個定位器的定位器。
button = page.get_by_role("button").and_(page.get_by_title("Subscribe"))
-
新的事件 browser_context.on("console") 和 browser_context.on("dialog") 訂閱來自給定瀏覽器上下文中的任何頁面的任何對話框和控制台訊息。使用新方法 console_message.page 和 dialog.page 精確定位事件來源。
瀏覽器版本
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
此版本也針對以下穩定頻道進行了測試:
- Google Chrome 113
- Microsoft Edge 113
版本 1.33
定位器更新
-
使用 locator.or_() 建立一個匹配任意兩個定位器的定位器。考慮一個情景,你想點擊 "New email" 按鈕,但有時會彈出一個安全設定對話框。在這種情況下,你可以等待 "New email" 按鈕或對話框,並相應地操作:
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_not
和has_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-first 斷言 expect(locator).to_be_attached() 確保元素存在於頁面的 DOM 中。不要與 expect(locator).to_be_visible() 混淆,後者確保元素既附加又可見。
新的 API
- locator.or_()
- 新選項
has_not
在 locator.filter() - 新選項
has_not_text
在 locator.filter() - expect(locator).to_be_attached()
- 新選項
timeout
在 route.fetch()
⚠️ 重大變更
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
- 自訂 expect 訊息,請參閱 測試斷言文件。
- 新選項
update_mode
和update_content
在 page.route_from_har() 和 browser_context.route_from_har()。 - 鏈接現有的定位器物件,詳情請參閱 定位器文件。
- 方法中的新選項
name
在 tracing.start_chunk()。
瀏覽器版本
- 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")
# 確保元素的至少一部分與視窗相交。
expect(locator).to_be_in_viewport()
# 確保元素完全在視窗之外。
expect(locator).not_to_be_in_viewport()
# 確保元素的至少一半與視窗相交。
expect(locator).to_be_in_viewport(ratio=0.5)
雜項
- 現在可以在單獨的視窗中開啟追蹤檢視器中的 DOM 快照。
- 新選項
route.fetch.max_redirects
用於方法 route.fetch()。 - Playwright 現在支援 Debian 11 arm64。
- 官方 docker images 現在包含 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() 現在可以通過值或標籤匹配:
<select multiple>
<option value="red">Red</div>
<option value="green">Green</div>
<option value="blue">Blue</div>
</select>element.select_option("Red")
雜項
- 選項
postData
在方法 route.continue_ 現在支援 Serializable 值。
瀏覽器版本
- Chromium 109.0.5414.46
- Mozilla Firefox 107.0
- WebKit 16.4
此版本也針對以下穩定頻道進行了測試:
- Google Chrome 108
- Microsoft Edge 108
版本 1.28
Playwright 工具
- 程式碼產生器中的即時定位器。 使用 "Explore" 工具為頁面上的任意元素生成定位器。
新的 API
瀏覽器版本
- Chromium 108.0.5359.29
- Mozilla Firefox 106.0
- WebKit 16.4
此版本也針對以下穩定頻道進行了測試:
- Google Chrome 107
- Microsoft Edge 107
版本 1.27
定位器
使用這些新的 API,寫定位器是一種樂趣:
- page.get_by_text() 來根據文本內容定位。
- page.get_by_role() 來根據 ARIA role、ARIA attributes 和 accessible name 定位。
- page.get_by_label() 來根據關聯標籤的文本定位表單控件。
- page.get_by_test_id() 來根據其
data-testid
屬性定位元素(其他屬性可配置)。 - page.get_by_placeholder() 來根據佔位符定位輸入框。
- page.get_by_alt_text() 來根據文本替代項定位元素,通常是圖像。
- page.get_by_title() 來根據標題定位元素。
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()
所有相同的方法也可在 Locator、FrameLocator 和 Frame 類別上使用。
其他亮點
- 如 v1.25 中所宣布,Ubuntu 18 將於 2022 年 12 月起不再支援。此外,從下一個 Playwright 版本開始,Ubuntu 18 將不再有 WebKit 更新。
行為變更
-
expect(locator).to_have_attribute() with an empty value does not match missing attribute anymore。For example, the following snippet will succeed when
button
does not have adisabled
attribute.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
斷言
- 新選項
enabled
用於 expect(locator).to_be_enabled()。 - expect(locator).to_have_text() 現在可以穿透開放的 shadow roots。
- 新選項
editable
用於 expect(locator).to_be_editable()。 - 新選項
visible
用於 expect(locator).to_be_visible()。
其他亮點
- 新選項
max_redirects
用於 api_request_context.get() 和其他方法來限制重定向次數。 - 現在支援 Python 3.11。
行為變更
一堆 Playwright API 已經支援 wait_until: "domcontentloaded"
選項。例如:
page.goto("https://playwright.dev", wait_until="domcontentloaded")
在 1.26 之前,這會等待所有 iframes 觸發 DOMContentLoaded
事件。
為了符合 web 規範,'domcontentloaded'
值只會等待目標框架觸發 'DOMContentLoaded'
事件。使用 wait_until="load"
來等待所有的 iframes。
瀏覽器版本
- 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 現在支援 Debian 11 Bullseye 在 x86_64 上的 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:
- Sync
- Async
context = browser.new_context(record_har_path="github.har.zip")
# ... do stuff ...
context.close()
context = await browser.new_context(record_har_path="github.har.zip")
# ... do stuff ...
await context.close()
使用新方法 page.route_from_har() 或 browser_context.route_from_har() 從 HAR 檔案提供匹配的回應:
- Sync
- Async
context.route_from_har("github.har.zip")
await context.route_from_har("github.har.zip")
在我們的文件中閱讀更多內容。
進階路由
你現在可以使用 route.fallback() 來延遲路由到其他處理程序。
考慮以下範例:
- Sync
- Async
# 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)
# Remove a header from all requests
async def remove_header_handler(route: Route) -> None:
headers = await route.request.all_headers()
if "if-none-match" in headers:
del headers["if-none-match"]
await route.fallback(headers=headers)
await page.route("**/*", remove_header_handler)
# Abort all images
async def abort_images_handler(route: Route) -> None:
if route.request.resource_type == "image":
await route.abort()
else:
await route.fallback()
await page.route("**/*", abort_images_handler)
請注意,新的方法 page.route_from_har() 和 browser_context.route_from_har() 也參與路由並且可以被延遲。
Web-First Assertions Update
- 新方法 expect(locator).to_have_values() 可斷言
<select multiple>
元素的所有選擇值。 - 方法 expect(locator).to_contain_text() 和 expect(locator).to_have_text() 現在接受
ignore_case
選項。
雜項
-
如果有服務工作者阻礙了你,你現在可以使用新的上下文選項
service_workers
輕鬆停用它:- Sync
- Async
context = browser.new_context(service_workers="block")
page = context.new_page()context = await browser.new_context(service_workers="block")
page = await context.new_page() -
使用
.zip
路徑作為recordHar
上下文選項會自動壓縮生成的 HAR:- Sync
- Async
context = browser.new_context(record_har_path="github.har.zip")
context = await browser.new_context(record_har_path="github.har.zip")
-
如果你打算手動編輯 HAR,考慮使用
"minimal"
HAR 錄製模式,該模式僅記錄重播所需的基本資訊:- Sync
- Async
context = browser.new_context(record_har_mode="minimal", record_har_path="har.har")
context = await browser.new_context(record_har_mode="minimal", record_har_path="har.har")
-
Playwright 現在可在 Ubuntu 22 amd64 和 Ubuntu 22 arm64 上執行。
版本 1.22
重點
-
允許通過其 ARIA role、ARIA attributes 和 accessible name 選擇元素的角色選擇器。
# 點擊具有可訪問名稱 "log in" 的按鈕
page.locator("role=button[name='log in']").click()閱讀更多在 我們的文件。
-
新的 locator.filter() API 用於過濾現有的定位器
buttons = page.locator("role=button")
# ...
submit_button = buttons.filter(has_text="Submit")
submit_button.click() -
程式碼產生器現在支持生成 Pytest 測試
版本 1.21
重點
-
新的角色選擇器允許通過其 ARIA role、ARIA attributes 和 accessible name 選擇元素。
- Sync
- Async
# 點擊一個可訪問名稱為 "log in" 的按鈕
page.locator("role=button[name='log in']").click()# 點擊一個可訪問名稱為 "log in" 的按鈕
await page.locator("role=button[name='log in']").click()閱讀更多在 我們的文件。
-
新的
scale
選項在 page.screenshot() 中,用於更小尺寸的截圖。 -
新的
caret
選項在 page.screenshot() 中,用於控制文本插入點。預設為"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
重點
- 新選項用於方法 page.screenshot(), locator.screenshot() 和 element_handle.screenshot():
- 選項
animations: "disabled"
將所有 CSS 動畫和過渡倒回到一致的狀態 - 選項
mask: Locator[]
將給定元素遮罩,覆蓋上粉紅色#FF00FF
方框。
- 選項
- Trace Viewer 現在顯示 API 測試請求。
- locator.highlight() 視覺上顯示元素,以便於除錯。
公告
- 我們現在提供一個指定的 Python docker 映像
mcr.microsoft.com/playwright/python
。如果你使用 Python,請切換到它。這是最後一個包含 Python 在我們的 javascriptmcr.microsoft.com/playwright
docker 映像中的版本。 - 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
重點
-
定位器現在支援
has
選項,確保其內包含另一個定位器:- Sync
- Async
page.locator("article", has=page.locator(".highlight")).click()
await page.locator("article", has=page.locator(".highlight")).click()
閱讀更多在 定位器文件。
-
新的 locator.page
-
page.screenshot() 和 locator.screenshot() 現在自動隱藏閃爍的插入點
-
Playwright Codegen 現在生成定位器和框架定位器
瀏覽器版本
- 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 Testing,讓你可以直接從 Python 發送請求到伺服器!現在你可以:
- 測試你的伺服器 API
- 在測試中訪問 web 應用程式之前準備伺服器端狀態
- 在瀏覽器中執行一些操作後驗證伺服器端後置條件
要代表 Playwright 的 Page 發出請求,使用 new page.request API:
- Sync
- Async
# Do a GET request on behalf of page
res = page.request.get("http://example.com/foo.json")
# Do a GET request on behalf of page
res = await page.request.get("http://example.com/foo.json")
在我們的文件中閱讀更多內容。
Web-First Assertions
Playwright for Python 1.18 準備推出 Web-First Assertions。
考慮以下範例:
- Sync
- Async
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")
from playwright.async_api import Page, expect
async def test_status_becomes_submitted(page: Page) -> None:
# ..
await page.locator("#submit-button").click()
await expect(page.locator(".status")).to_have_text("Submitted")
Playwright 將會重新測試具有選擇器 .status
的節點,直到獲取的節點具有 "Submitted"
文本。它將會重新獲取節點並一遍又一遍地檢查,直到滿足條件或達到超時。你可以將這個超時作為選項傳遞。
閱讀更多在 我們的文件。
定位器改進
-
每個 locator 現在可以選擇性地根據其包含的文本進行過濾:
- Sync
- Async
page.locator("li", has_text="my item").locator("button").click()
await page.locator("li", has_text="my item").locator("button").click()
閱讀更多在 locator 文件。
新的 API 和變更
accept_downloads
選項現在預設為True
。sources
選項將來源嵌入追蹤中。
瀏覽器版本
- Chromium 99.0.4812.0
- Mozilla Firefox 95.0
- WebKit 15.4
此版本也針對以下穩定頻道進行了測試:
- Google Chrome 97
- Microsoft Edge 97
版本 1.17
Frame 定位器
Playwright 1.17 準備推出 frame locators - 一個頁面上 iframe 的定位器。Frame locators 捕捉足以獲取 iframe
的邏輯,然後在該 iframe 中定位元素。Frame locators 預設是嚴格的,會等待 iframe
出現,並且可以用於 Web-First 斷言。
框架定位器可以使用 page.frame_locator() 或 locator.frame_locator() 方法建立。
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 是一個 progressive web application,在本地處理追蹤。
- Playwright Test 追蹤現在預設包含來源(這些可以用追蹤選項關閉)
- 追蹤檢視器現在顯示測試名稱
- 新的追蹤 Metadata 頁籤包含瀏覽器詳細資訊
- 快照現在有 URL 欄
HTML Report Update
- HTML 報告現在支援動態篩選
- 報告現在是一個單一靜態 HTML 檔案,可以通過電子郵件發送或作為 slack 附件。
Ubuntu ARM64 支援 + 更多
-
Playwright 現在支援 Ubuntu 20.04 ARM64。你現在可以在 Apple M1 和 Raspberry Pi 上的 Docker 中執行 Playwright 測試。
-
你現在可以使用 Playwright 在 Linux 上安裝穩定版本的 Edge:
npx playwright install msedge
新的 API
版本 1.16
🎭 Playwright 函式庫
locator.wait_for
等待定位器解析為具有給定狀態的單個元素。預設為 state: 'visible'
。
在處理清單時特別方便:
order_sent = page.locator("#order-sent")
order_sent.wait_for()
閱讀更多關於 locator.wait_for。
Docker support for Arm64
Playwright Docker image 現在已經為 Arm64 發佈,因此可以在 Apple Silicon 上使用。
了解更多關於 Docker integration 的資訊。
🎭 Playwright Trace Viewer
- 使用
npx playwright show-trace
執行 trace viewer 並將 trace 檔案拖放到 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() 現在可以垂直或水平滾動。
📜 新標頭 API
先前無法獲取回應的多個標頭值。現在這是可能的,並且提供了額外的輔助函式:
- request.all_headers()
- request.headers_array()
- request.header_value()
- response.all_headers()
- response.headers_array()
- response.header_value()
- response.header_values()
🌈 強制色彩模擬
現在可以通過在 browser.new_context() 中傳遞 forced-colors
CSS 媒體功能或呼叫 page.emulate_media() 來模擬它。
新的 API
- page.route() 接受新的
times
選項來指定此路由應匹配的次數。 - page.set_checked() 和 locator.set_checked() 被引入來設置複選框的選中狀態。
- request.sizes() 返回給定 http 請求的資源大小資訊。
- tracing.start_chunk() - 開始一個新的追踪塊。
- tracing.stop_chunk() - 停止一個新的追踪塊。
瀏覽器版本
- 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)
📍 新的 定位器 API
Locator 代表頁面上元素的視圖。它捕捉了足夠的邏輯,以便在任何給定時刻檢索元素。
兩者之間的區別在於 Locator 和 ElementHandle 是後者指向特定的元素,而 Locator 捕捉如何檢索該元素的邏輯。
另外,定位器預設是**「嚴格」的**!
locator = page.locator("button")
locator.click()
了解更多資訊請參閱文件。
🧩 實驗性 React 和 Vue 選擇器引擎
React 和 Vue 選擇器允許通過其元件名稱和/或屬性值選擇元素。語法與屬性選擇器非常相似,並支持所有屬性選擇器運算符。
page.locator("_react=SubmitButton[enabled=true]").click()
page.locator("_vue=submit-button[enabled=true]").click()
了解更多在 react selectors 文件 和 vue selectors 文件。
✨ 新的 nth
和 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
- 🖖 程式化拖放支援 通過 page.drag_and_drop() API。
- 🔎 增強的 HAR 包含請求和回應的主體大小。通過
recordHar
選項在 browser.new_context() 使用。
工具
- Playwright Trace Viewer 現在顯示參數、返回值和
console.log()
呼叫。
新的和全面修訂的指南
瀏覽器版本
- Chromium 93.0.4576.0
- Mozilla Firefox 90.0
- WebKit 14.2
新的 Playwright API
- 新的
baseURL
選項在 browser.new_context() 和 browser.new_page() - response.security_details() 和 response.server_addr()
- page.drag_and_drop() 和 frame.drag_and_drop()
- download.cancel()
- page.input_value(), frame.input_value() 和 element_handle.input_value()
- 新的
force
選項在 page.fill(), frame.fill(), 和 element_handle.fill() - 新的
force
選項在 page.select_option(), frame.select_option(), 和 element_handle.select_option()
版本 1.12
🧟♂️ 準備推出 Playwright Trace Viewer
Playwright Trace Viewer 是一個新的 GUI 工具,幫助在程式碼執行後探索記錄的 Playwright Traces。Playwright Traces 讓你檢查:
- 每個 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")
# Stop tracing and export it into a zip archive.
context.tracing.stop(path = "trace.zip")
稍後使用 Playwright CLI 檢查追蹤:
playwright show-trace trace.zip
這將開啟以下 GUI:
👉 閱讀更多在 trace viewer documentation。
瀏覽器版本
- Chromium 93.0.4530.0
- Mozilla Firefox 89.0
- WebKit 14.2
此版本的 Playwright 也針對以下穩定頻道進行了測試:
- Google Chrome 91
- Microsoft Edge 91
新的 API
reducedMotion
選項在 page.emulate_media(), browser_type.launch_persistent_context(), browser.new_context() 和 browser.new_page()- browser_context.on("request")
- browser_context.on("requestfailed")
- browser_context.on("requestfinished")
- browser_context.on("response")
tracesDir
選項在 browser_type.launch() 和 browser_type.launch_persistent_context()- 新的 browser_context.tracing API 命名空間
- 新的 download.page 方法
版本 1.11
🎥 新 影片: Playwright: A New Test Automation Framework for the Modern Web (slides)
- 我們討論了 Playwright
- 展示了幕後的工程工作
- 進行了具有新功能的現場展示 ✨
- 特別感謝 applitools 主辦這個活動並邀請我們!
瀏覽器版本
- Chromium 92.0.4498.0
- Mozilla Firefox 89.0b6
- WebKit 14.2
新的 API
- 支援 async predicates 在 API 中的方法,如 page.expect_request() 和其他方法
- 新的 模擬裝置: Galaxy S8, Galaxy S9+, Galaxy Tab S4, Pixel 3, Pixel 4
- 新的方法:
- page.wait_for_url() 以等待導航到 URL
- video.delete() 和 video.save_as() 以管理螢幕錄影
- 新的選項:
- 在 browser.new_context() 方法中的
screen
選項以模擬window.screen
尺寸 - 在 page.check() 和 page.uncheck() 方法中的
position
選項 - 在 page.check(), page.uncheck(), page.click(), page.dblclick(), page.hover() 和 page.tap() 方法中的
trial
選項以進行乾跑操作
- 在 browser.new_context() 方法中的
版本 1.10
- Playwright for Java v1.10 現在已經穩定!
- 使用新頻道 API在Google Chrome和Microsoft Edge穩定頻道上執行 Playwright。
- 在 Mac 和 Windows 上,Chromium 截圖速度快。
捆綁的瀏覽器版本
- Chromium 90.0.4430.0
- Mozilla Firefox 87.0b10
- WebKit 14.2
此版本的 Playwright 也針對以下穩定頻道進行了測試:
- Google Chrome 89
- Microsoft Edge 89
新的 API
- browser_type.launch() 現在接受新的 'channel' 選項。閱讀更多在 我們的文件。
版本 1.9
- Playwright Inspector 是一個新的 GUI 工具來編寫和除錯你的測試。
- 逐行除錯你的 Playwright 腳本,具有播放、暫停和逐步執行功能。
- 透過錄製使用者操作來編寫新腳本。
- 透過懸停在元素上來產生元素選擇器。
- 設定
PWDEBUG=1
環境變數來啟動 Inspector
- 在有頭模式下使用 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
-
根據佈局選擇元素 使用
:left-of()
,:right-of()
,:above()
和:below()
。 -
Playwright 現在包括命令列介面,前稱 playwright-cli。
playwright --help
-
page.select_option() 現在會等待選項出現。
-
新的方法來斷言元素狀態 如 page.is_editable()。
新的 API
- element_handle.is_checked()
- element_handle.is_disabled()
- element_handle.is_editable()
- element_handle.is_enabled()
- element_handle.is_hidden()
- element_handle.is_visible()
- page.is_checked()
- page.is_disabled()
- page.is_editable()
- page.is_enabled()
- page.is_hidden()
- page.is_visible()
- 新選項 'editable' 在 element_handle.wait_for_element_state()。
瀏覽器版本
- Chromium 90.0.4392.0
- Mozilla Firefox 85.0b5
- WebKit 14.1
版本 1.7
- 新 Java SDK: Playwright for Java 現在與 JavaScript、Python 和 .NET bindings 相當。
- 瀏覽器儲存 API: 新的便利 API 用於儲存和加載瀏覽器儲存狀態(cookies、本地儲存),以簡化具有身份驗證的自動化場景。
- 新 CSS 選擇器: 我們聽取了您對更靈活選擇器的反饋,並重新設計了選擇器的實現。Playwright 1.7 推出了新的 CSS 擴展,並且很快會有更多更新。
- 新網站: playwright.dev 的文件網站已更新,現在使用 Docusaurus 構建。
- 支持 Apple Silicon: 用於 WebKit 和 Chromium 的 Playwright 瀏覽器二進制文件現在已為 Apple Silicon 構建。
新的 API
- browser_context.storage_state() 取得當前狀態以供日後重用。
- 在 browser.new_context() 和 browser.new_page() 中的
storageState
選項設定瀏覽器上下文狀態。
瀏覽器版本
- Chromium 89.0.4344.0
- Mozilla Firefox 84.0b9
- WebKit 14.1