Skip to main content

發行說明

版本 1.47

Network 頁籤改進

追蹤檢視器中的 Network 分頁有幾個不錯的改進:

  • 按資產類型和 URL 過濾
  • 更好地顯示查詢字串參數
  • 字體資產預覽

Network tab now has filters

雜項

  • mcr.microsoft.com/playwright-java:v1.47.0 現在提供基於 Ubuntu 24.04 Noble 的 Playwright 映像。要使用基於 22.02 jammy 的映像,請改用 mcr.microsoft.com/playwright-java:v1.47.0-jammy
  • 現在可以通過將 certkey 作為位元組陣列傳遞,而不是文件路徑,從記憶體中傳遞 TLS 客戶端證書。
  • Locator.selectOption() 中的 noWaitAfter 已被棄用。
  • 我們已經看到 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.newContext()APIRequest.newContext() 的參數。以下程式碼片段為 https://example.com 設定客戶端證書:

BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setClientCertificates(asList(new ClientCertificate("https://example.com")
.setCertPath(Paths.get("client-certificates/cert.pem"))
.setKeyPath(Paths.get("client-certificates/key.pem")))));

追蹤檢視器更新

  • 現在在附件窗格中內嵌顯示文字附件的內容。
  • 新增設定以顯示/隱藏路由操作,如 Route.resume()
  • 請求方法和狀態顯示在網路詳細資訊標籤中。
  • 新按鈕可將來源檔案位置複製到剪貼簿。
  • Metadata 窗格現在顯示 baseURL

雜項

瀏覽器版本

  • 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(new Clock.InstallOptions().setTime("2024-02-02T08:00:00"));
page.navigate("http://localhost:3333");
Locator locator = page.getByTestId("current-time");

// Pretend that the user closed the laptop lid and opened it again at 10am.
// Pause the time once reached that point.
page.clock().pauseAt("2024-02-02T10:00:00");

// Assert the page state.
assertThat(locator).hasText("2/2/2024, 10:00:00 AM");

// Close the laptop lid again and open it at 10:30am.
page.clock().fastForward("30:00");
assertThat(locator).hasText("2/2/2024, 10:30:00 AM");

請參閱時鐘指南以獲取更多資訊。

雜項

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

    page.getByLabel("Upload directory").setInputFiles(Paths.get("mydir"));
  • 多個方法如 Locator.click()Locator.press() 現在支援 ControlOrMeta 修飾鍵。此鍵在 macOS 上對應 Meta,在 Windows 和 Linux 上對應 Control

    // 按下常見的鍵盤快捷鍵 Control+S 或 Meta+S 以觸發 "Save" 操作。
    page.keyboard.press("ControlOrMeta+S");
  • 新屬性 httpCredentials.sendAPIRequest.newContext() 中允許選擇總是發送 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

無障礙聲明

  • assertThat(locator).hasAccessibleName() 檢查元素是否具有指定的可存取名稱:

    Locator locator = page.getByRole(AriaRole.BUTTON);
    assertThat(locator).hasAccessibleName("Submit");
  • assertThat(locator).hasAccessibleDescription() 檢查元素是否具有指定的可存取描述:

    Locator locator = page.getByRole(AriaRole.BUTTON);
    assertThat(locator).hasAccessibleDescription("Upload a photo");
  • assertThat(locator).hasRole() 檢查元素是否具有指定的 ARIA 角色:

    Locator locator = page.getByTestId("save-button");
    assertThat(locator).hasRole(AriaRole.BUTTON);

定位器處理程式

  • 執行使用 Page.addLocatorHandler() 添加的處理程式後,Playwright 現在會等待觸發處理程式的覆蓋層不再可見。你可以使用新的 setNoWaitAfter 選項來選擇不使用此行為。
  • 你可以在 Page.addLocatorHandler() 中使用新的 setTimes 選項來指定處理程式應執行的最大次數。
  • Page.addLocatorHandler() 中的處理程式現在接受定位器作為參數。
  • 新的 Page.removeLocatorHandler() 方法用於移除先前添加的定位器處理程式。
Locator locator = page.getByText("This interstitial covers the button");
page.addLocatorHandler(locator, overlay -> {
overlay.locator("#close").click();
}, new Page.AddLocatorHandlerOptions().setTimes(3).setNoWaitAfter(true));
// Run your tests that can be interrupted by the overlay.
// ...
page.removeLocatorHandler(locator);

其他選項

  • 新方法 FormData.append() 允許在 RequestOptionssetMultipart 選項中指定具有相同名稱的重複欄位:

    FormData formData = FormData.create();
    formData.append("file", new FilePayload("f1.js", "text/javascript",
    "var x = 2024;".getBytes(StandardCharsets.UTF_8)));
    formData.append("file", new FilePayload("f2.txt", "text/plain",
    "hello".getBytes(StandardCharsets.UTF_8)));
    APIResponse response = context.request().post("https://example.com/uploadFile", RequestOptions.create().setMultipart(formData));
  • expect(page).toHaveURL(url) 現在支持 setIgnoreCase 選項

瀏覽器版本

  • Chromium 125.0.6422.14
  • Mozilla Firefox 125.0.1
  • WebKit 17.4

此版本也針對以下穩定頻道進行了測試:

  • Google Chrome 124
  • Microsoft Edge 124

版本 1.43

新的 API

  • Method BrowserContext.clearCookies() now supports filters to remove only some cookies。

    // 清除所有 cookies。
    context.clearCookies();
    // 新增: 清除具有特定名稱的 cookies。
    context.clearCookies(new BrowserContext.ClearCookiesOptions().setName("session-id"));
    // 新增: 清除特定域的 cookies。
    context.clearCookies(new BrowserContext.ClearCookiesOptions().setDomain("my-origin.com"));
  • New method Locator.contentFrame() converts a Locator 物件 to a FrameLocator。This can be useful when you have a Locator 物件 obtained somewhere, and later on would like to interact with the content inside the frame。

    Locator locator = page.locator("iframe[name='embedded']");
    // ...
    FrameLocator frameLocator = locator.contentFrame();
    frameLocator.getByRole(AriaRole.BUTTON).click();
  • New method FrameLocator.owner() converts a FrameLocator 物件 to a Locator。This can be useful when you have a FrameLocator 物件 obtained somewhere, and later on would like to interact with the iframe element。

    FrameLocator frameLocator = page.frameLocator("iframe[name='embedded']");
    // ...
    Locator locator = frameLocator.owner();
    assertThat(locator).isVisible();

瀏覽器版本

  • Chromium 124.0.6367.8
  • Mozilla Firefox 124.0
  • WebKit 17.4

此版本也針對以下穩定頻道進行了測試:

  • Google Chrome 123
  • Microsoft Edge 123

版本 1.42

實驗性 JUnit 整合

新增新的 @UsePlaywright 註釋到您的測試類別,以便在測試方法中開始使用 Playwright fixtures 來測試 PageBrowserContextBrowserAPIRequestContextPlaywright

package org.example;

import com.microsoft.playwright.Page;
import com.microsoft.playwright.junit.UsePlaywright;
import org.junit.jupiter.api.Test;

import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;

@UsePlaywright
public class TestExample {
void shouldNavigateToInstallationGuide(Page page) {
page.navigate("https://playwright.dev/java/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Docs")).click();
assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Installation"))).isVisible();
}

@Test
void shouldCheckTheBox(Page page) {
page.setContent("<input id='checkbox' type='checkbox'></input>");
page.locator("input").check();
assertEquals(true, page.evaluate("window['checkbox'].checked"));
}

@Test
void shouldSearchWiki(Page page) {
page.navigate("https://www.wikipedia.org/");
page.locator("input[name=\"search\"]").click();
page.locator("input[name=\"search\"]").fill("playwright");
page.locator("input[name=\"search\"]").press("Enter");
assertThat(page).hasURL("https://en.wikipedia.org/wiki/Playwright");
}
}

在上述範例中,所有三個測試方法使用相同的 Browser。每個測試使用其自己的 BrowserContextPage

自訂選項

實作您自己的 OptionsFactory 來使用自訂配置初始化這些夾具。

import com.microsoft.playwright.junit.Options;
import com.microsoft.playwright.junit.OptionsFactory;
import com.microsoft.playwright.junit.UsePlaywright;

@UsePlaywright(MyTest.CustomOptions.class)
public class MyTest {

public static class CustomOptions implements OptionsFactory {
@Override
public Options getOptions() {
return new Options()
.setHeadless(false)
.setContextOption(new Browser.NewContextOptions()
.setBaseURL("https://github.com"))
.setApiRequestOptions(new APIRequest.NewContextOptions()
.setBaseURL("https://playwright.dev"));
}
}

@Test
public void testWithCustomOptions(Page page, APIRequestContext request) {
page.navigate("/");
assertThat(page).hasURL(Pattern.compile("github"));

APIResponse response = request.get("/");
assertTrue(response.text().contains("Playwright"));
}
}

了解更多關於我們 JUnit 指南 中的 fixtures。

新定位器處理程式

新方法 Page.addLocatorHandler() 註冊了一個回呼,當指定元素變得可見時將會被呼叫,並且可能會阻擋 Playwright 操作。回呼可以去除覆蓋層。這裡有一個範例,當 cookie 對話框出現時將其關閉。

// Setup the handler.
page.addLocatorHandler(
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Hej! You are in control of your cookies.")),
() - > {
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Accept all")).click();
});
// Write the test as usual.
page.navigate("https://www.ikea.com/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Collection of blue and white")).click();
assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Light and easy"))).isVisible();

新的 API

  • Page.pdf() 接受兩個新選項 taggedoutline

公告

  • ⚠️ 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

產生斷言的新工具:

這裡是一個帶有斷言的生成測試範例:

page.navigate("https://playwright.dev/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Get started")).click();
assertThat(page.getByLabel("Breadcrumbs").getByRole(AriaRole.LIST)).containsText("Installation");
assertThat(page.getByLabel("Search")).isVisible();
page.getByLabel("Search").click();
page.getByPlaceholder("Search docs").fill("locator");
assertThat(page.getByPlaceholder("Search docs")).hasValue("locator");

新的 API

其他變更

瀏覽器版本

  • 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

新的 API

  • 新方法 BrowserContext.newCDPSession()Browser.newBrowserCDPSession() 分別為頁面和瀏覽器建立一個 Chrome DevTools Protocol 會話。

    CDPSession cdpSession = page.context().newCDPSession(page);
    cdpSession.send("Runtime.enable");

    JsonObject params = new JsonObject();
    params.addProperty("expression", "window.foo = 'bar'");
    cdpSession.send("Runtime.evaluate", params);

    Object foo = page.evaluate("window['foo']");
    assertEquals("bar", foo);

📚 Debian 12 Bookworm 支援

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

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

重點

  • 新選項 maskColor 用於方法 Page.screenshot()Locator.screenshot() 來更改預設遮罩顏色。

  • 新的 uninstall CLI 命令來卸載瀏覽器二進位檔:

    $ mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="uninstall" # 移除此安裝所安裝的瀏覽器
    $ mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="uninstall --all" # 移除所有曾經安裝的 Playwright 瀏覽器

瀏覽器版本

  • 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" 按鈕,但有時會彈出一個安全設定對話框。在這種情況下,你可以等待 "New email" 按鈕或對話框並相應地操作:

    Locator newEmail = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("New email"));
    Locator dialog = page.getByText("Confirm security settings");
    assertThat(newEmail.or(dialog)).isVisible();
    if (dialog.isVisible())
    page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Dismiss")).click();
    newEmail.click();
  • Locator.filter() 中使用新的選項 hasNothasNotText 來找到不符合某些條件的元素。

    Locator rowLocator = page.locator("tr");
    rowLocator
    .filter(new Locator.FilterOptions().setHasNotText("text in column 1"))
    .filter(new Locator.FilterOptions().setHasNot(
    page.getByRole(AriaRole.BUTTON,
    new Page.GetByRoleOptions().setName("column 2 button" )))
    .screenshot();
  • 使用新的網頁優先斷言 assertThat(locator).isAttached() 來確保元素存在於頁面的 DOM 中。不要與 assertThat(locator).isVisible() 混淆,後者確保元素既已附加又可見。

新的 API

其他亮點

  • 原生支援 Apple Silicon - Playwright 現在無需 Rosetta 即可執行
  • 新增 Ubuntu 22.04 (Jammy) Docker 映像檔

⚠️ 重大變更

  • mcr.microsoft.com/playwright/java:v1.33.0 現在提供基於 Ubuntu Jammy 的 Playwright 映像。要使用基於 focal 的映像,請改用 mcr.microsoft.com/playwright/java: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

  • 新的斷言 assertThat(locator).isInViewport() 確保定位器指向與視窗相交的元素,根據 intersection observer API

    Locator locator = page.getByRole(AriaRole.BUTTON);

    // 確保元素的至少一部分與視窗相交。
    assertThat(locator).isInViewport();

    // 確保元素完全在視窗外。
    assertThat(locator).not().isInViewport();

    // 確保元素至少有一半與視窗相交。
    assertThat(locator).isInViewport(new LocatorAssertions.IsInViewportOptions().setRatio(0.5));

雜項

  • 現在可以在單獨的視窗中打開追蹤檢視器中的 DOM 快照。
  • 新選項 Route.fetch.maxRedirects 用於方法 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():

    page.route("**/api/settings", route -> {
    // 獲取原始設定。
    APIResponse response = route.fetch();
    // 將設定主題強制為預定義值。
    String body = response.text().replace("\"theme\":\"default\"",
    "\"theme\":\"Solorized\"");
    // 用修改後的資料回應。
    route.fulfill(new Route.FulfillOptions().setResponse(response).setBody(body));
    });
  • 新方法 Locator.all() 來迭代所有匹配的元素:

    // 檢查所有的複選框!
    Locator checkboxes = page.getByRole(AriaRole.CHECKBOX);
    for (Locator checkbox : checkboxes.all())
    checkbox.check();
  • Locator.selectOption() 現在可以通過值或標籤匹配:

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

瀏覽器版本

  • 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.getByLabel("User Name").fill("John");

page.getByLabel("Password").fill("secret-password");

page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign in")).click();

assertThat(page.getByText("Welcome, John!")).isVisible();

所有相同的方法也可在 LocatorFrameLocatorFrame 類別上使用。

其他亮點

  • 如 v1.25 中所宣布,Ubuntu 18 將於 2022 年 12 月起不再支援。此外,從下一個 Playwright 版本開始,Ubuntu 18 將不再有 WebKit 更新。

行為變更

  • assertThat(locator).hasAttribute() with an empty value does not match missing attribute anymore. For example, the following snippet will succeed when button does not have a disabled attribute。

    assertThat(page.getByRole(AriaRole.BUTTON)).hasAttribute("disabled", "");

瀏覽器版本

  • Chromium 107.0.5304.18
  • Mozilla Firefox 105.0.1
  • WebKit 16.0

此版本也針對以下穩定頻道進行了測試:

  • Google Chrome 106
  • Microsoft Edge 106

版本 1.26

斷言

其他亮點

  • 新選項 setMaxRedirects 用於 APIRequestContext.get() 和其他用來限制重定向次數。
  • Docker 映像現在使用 OpenJDK 17。

行為變更

一堆 Playwright APIs 已經支援 setWaitUntil(WaitUntilState.DOMCONTENTLOADED) 選項。例如:

page.navigate("https://playwright.dev", new Page.NavigateOptions().setWaitUntil(WaitUntilState.DOMCONTENTLOADED));

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

為了符合 web 規範,WaitUntilState.DOMCONTENTLOADED 值僅等待目標框架觸發 'DOMContentLoaded' 事件。使用 setWaitUntil(WaitUntilState.LOAD) 等待所有 iframes。

瀏覽器版本

  • Chromium 106.0.5249.30
  • Mozilla Firefox 104.0
  • WebKit 16.0

此版本也針對以下穩定頻道進行了測試:

  • Google Chrome 105
  • Microsoft Edge 105

版本 1.25

新的 API 和變更

公告

  • 🪦 這是最後一個支援 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 | ✅ | ✅ | ✅ |

版本 1.23

網路重播

現在你可以將網路流量記錄到 HAR 檔案中,並在你的測試中重新使用這些流量。

記錄網路到 HAR 檔案:

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="open --save-har=example.har --save-har-glob='**/api/**' https://example.com"

或者,您可以以程式方式記錄 HAR:

BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setRecordHarPath(Paths.get("example.har"))
.setRecordHarUrlFilter("**/api/**"));

// ... Perform actions ...

// Close context to ensure HAR is saved to disk.
context.close();

使用新方法 Page.routeFromHAR()BrowserContext.routeFromHAR()HAR 檔案提供匹配的回應:

context.routeFromHAR(Paths.get("example.har"));

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

進階路由

你現在可以使用 Route.fallback() 來延遲路由到其他處理程序。

考慮以下範例:

// Remove a header from all requests.
page.route("**/*", route -> {
Map<String, String> headers = new HashMap<>(route.request().headers());
headers.remove("X-Secret");
route.resume(new Route.ResumeOptions().setHeaders(headers));
});

// Abort all images.
page.route("**/*", route -> {
if ("image".equals(route.request().resourceType()))
route.abort();
else
route.fallback();
});

請注意,新的方法 Page.routeFromHAR()BrowserContext.routeFromHAR() 也參與路由並且可以被延遲。

Web-First Assertions Update

雜項

  • 如果有一個 service worker 擋住了你的路,你現在可以使用新的上下文選項 serviceWorkers 輕鬆停用它:

    BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setServiceWorkers(ServiceWorkerPolicy.BLOCK));
  • 使用 .zip 路徑作為 recordHar 上下文選項會自動壓縮生成的 HAR:

    BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setRecordHarPath(Paths.get("example.har.zip")));
  • 如果你打算手動編輯 HAR,考慮使用 "minimal" HAR 錄製模式,它只記錄對重播至關重要的資訊:

    BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setRecordHarPath(Paths.get("example.har"))
    .setRecordHarMode(HarMode.MINIMAL));
  • Playwright 現在可以在 Ubuntu 22 amd64 和 Ubuntu 22 arm64 上執行。

版本 1.22

重點

  • 允許通過其 ARIA roleARIA attributesaccessible name 選擇元素的角色選擇器。

    // 點擊具有可訪問名稱 "log in" 的按鈕
    page.locator("role=button[name='log in']").click();

    閱讀更多在 我們的文件

  • 新的 Locator.filter() API 用於篩選現有的定位器

    Locator buttonsLocator = page.locator("role=button");
    // ...
    Locator submitButton = buttonsLocator.filter(new Locator.FilterOptions().setHasText("Submit"));
    submitButton.click();
  • Playwright for Java 現在支援 Ubuntu 20.04 ARM64Apple M1。你現在可以在 Apple M1 上、Apple M1 的 Docker 內以及 Raspberry Pi 上執行 Playwright for Java 測試。

版本 1.21

重點

行為變更

瀏覽器版本

  • Chromium 101.0.4951.26
  • Mozilla Firefox 98.0.2
  • WebKit 15.4

此版本也針對以下穩定頻道進行了測試:

  • Google Chrome 100
  • Microsoft Edge 100

版本 1.20

重點

公告

  • 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", new Page.LocatorOptions().setHas(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 Java 1.18 準備推出新的 API Testing,讓你可以直接從 Java 發送請求到伺服器!現在你可以:

  • 測試你的伺服器 API
  • 在測試中訪問 web 應用程式之前準備伺服器端狀態
  • 在瀏覽器中執行一些操作後驗證伺服器端後置條件

要代表 Playwright 的 Page 進行請求,使用 new Page.request() API:

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

在我們的 API 測試指南 中了解更多資訊。

Web-First Assertions

Playwright for Java 1.18 準備推出 Web-First Assertions

考慮以下範例:

...
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;

public class TestExample {
...
@Test
void statusBecomesSubmitted() {
...
page.locator("#submit-button").click();
assertThat(page.locator(".status")).hasText("Submitted");
}
}

Playwright 將會重新測試具有選擇器 .status 的節點,直到獲取的節點具有 "Submitted" 文本。它將會重新獲取節點並一遍又一遍地檢查,直到滿足條件或達到超時。你可以將這個超時作為選項傳遞。

閱讀更多在 我們的文件

定位器改進

  • Locator.dragTo()

  • 每個定位器現在可以選擇性地根據其包含的文本進行過濾:

    page.locator("li", new Page.LocatorOptions().setHasText("my item"))
    .locator("button").click();

    閱讀更多在 定位器文件

Tracing Improvements

Tracing 現在可以將 Java 原始碼嵌入到記錄的追蹤中,使用新的 setSources 選項。

追蹤-java-來源

新的 API 和變更

瀏覽器版本

  • 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.frameLocator()Locator.frameLocator() 方法建立。

Locator locator = page.frameLocator("#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:

    mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install msedge"

新的 API

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

版本 1.16

🎭 Playwright 函式庫

定位器.waitFor

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

Locator orderSent = page.locator("#order-sent");
orderSent.waitFor();

閱讀更多關於 Locator.waitFor()

🎭 Playwright Trace Viewer

  • 使用 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="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

以前無法獲取回應的多個標頭值。現在這是可能的,並且有額外的輔助函式可用:

🌈 強制色彩模擬

現在可以透過在 Browser.newContext() 中傳遞 forced-colors CSS 媒體功能或呼叫 Page.emulateMedia() 來模擬它。

新的 API

瀏覽器版本

  • Chromium 96.0.4641.0
  • Mozilla Firefox 92.0
  • WebKit 15.0

版本 1.14

⚡️ 新的 "strict" 模式

選擇器模糊性是自動化測試中的常見問題。"strict" 模式確保您的選擇器指向單一元素,否則會拋出錯誤。

在您的操作呼叫中設置 setStrict(true) 以選擇加入。

// This will throw if you have more than one button!
page.click("button", new Page.ClickOptions().setStrict(true));

📍 新的 定位器 API

Locator 代表頁面上元素的視圖。它捕捉了足夠的邏輯,以便在任何給定時刻檢索元素。

兩者之間的區別在於 LocatorElementHandle 是後者指向特定的元素,而 Locator 捕捉如何檢索該元素的邏輯。

另外,定位器預設是**「嚴格」的**!

Locator 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 selectors 文件vue selectors 文件

✨ 新的 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 Traces。Playwright Traces 讓你檢查:

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

追蹤是使用新的 BrowserContext.tracing() API 記錄的:

Browser browser = chromium.launch();
BrowserContext context = browser.newContext();

// Start tracing before creating / navigating a page.
context.tracing.start(new Tracing.StartOptions()
.setScreenshots(true)
.setSnapshots(true);

Page page = context.newPage();
page.goto("https://playwright.dev");

// Stop tracing and export it into a zip archive.
context.tracing.stop(new Tracing.StopOptions()
.setPath(Paths.get("trace.zip")));

稍後使用 Playwright CLI 檢查追蹤:

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="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

版本 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

版本 1.10

  • Playwright for Java v1.10 現在已經穩定
  • 使用新頻道 APIGoogle ChromeMicrosoft 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

版本 1.9

  • Playwright Inspector 是一個新的 GUI 工具,用於編寫和偵錯你的測試。
    • 逐行偵錯你的 Playwright 腳本,具有播放、暫停和逐步執行功能。
    • 通過錄製用戶操作來編寫新腳本。
    • 通過懸停在元素上來生成元素選擇器
    • 設置 PWDEBUG=1 環境變量以啟動 Inspector
  • 在有頭模式下使用 Page.pause() 暫停腳本執行。暫停頁面會啟動 Playwright Inspector 進行偵錯。
  • 新的 has-text 偽類用於 CSS 選擇器。: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 SDK: Playwright 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