Skip to main content

註釋

簡介

Playwright 支援在測試報告中顯示標籤和註釋。

你可以隨時添加你自己的標籤和註釋,但 Playwright 附帶了一些內建的標籤:

  • test.skip() 將測試標記為不相關。Playwright 不會執行此測試。在某些配置中測試不適用時使用此註釋。
  • test.fail() 將測試標記為失敗。Playwright 會執行此測試並確保它確實失敗。如果測試沒有失敗,Playwright 會抱怨。
  • test.fixme() 將測試標記為失敗。與 fail 註釋相反,Playwright 不會執行此測試。當測試執行緩慢或崩潰時使用 fixme
  • test.slow() 將測試標記為緩慢並將測試超時時間增加三倍。

可以將註釋新增到單一測試或一組測試。

內建註釋可以是有條件的,在這種情況下,它們在條件為真時適用,並且可能依賴於測試夾具。同一測試上可能有多個註釋,可能在不同的配置中。

聚焦測試

你可以聚焦一些測試。當有聚焦的測試時,只有這些測試執行。

test.only('focus this test', async ({ page }) => {
// Run only focused tests in the entire project.
});

跳過測試

將測試標記為跳過。

test.skip('skip this test', async ({ page }) => {
// This test is not run
});

有條件地跳過測試

您可以根據條件跳過某些測試。

test('skip this test', async ({ page, browserName }) => {
test.skip(browserName === 'firefox', 'Still working on it');
});

群組測試

你可以將測試分組,以給它們一個邏輯名稱或在群組之前/之後範圍內的鉤子。

import { test, expect } from '@playwright/test';

test.describe('two tests', () => {
test('one', async ({ page }) => {
// ...
});

test('two', async ({ page }) => {
// ...
});
});

標籤測試

有時候你會想要將測試標記為 @fast@slow,然後在測試報告中按標記過濾。或者你可能只想執行具有特定標記的測試。

要標記測試,可以在宣告測試時提供額外的詳細資訊物件,或在測試標題中添加 @ 符號。請注意,標籤必須以 @ 符號開頭。

import { test, expect } from '@playwright/test';

test('test login page', {
tag: '@fast',
}, async ({ page }) => {
// ...
});

test('test full report @slow', async ({ page }) => {
// ...
});

您也可以標記一組中的所有測試或提供多個標籤:

import { test, expect } from '@playwright/test';

test.describe('group', {
tag: '@report',
}, () => {
test('test report header', async ({ page }) => {
// ...
});

test('test full report', {
tag: ['@slow', '@vrt'],
}, async ({ page }) => {
// ...
});
});

你現在可以使用 --grep 命令列選項來執行具有特定標籤的測試。

npx playwright test --grep @fast

或者,如果你想要相反的效果,你可以跳過具有某個標籤的測試:

npx playwright test --grep-invert @fast

要執行包含任一標籤的測試(邏輯 OR 運算符):

npx playwright test --grep "@fast|@slow"

或者使用正則表達式前瞻來執行包含兩個標籤(邏輯 AND 運算符)的測試:

npx playwright test --grep "(?=.*@fast)(?=.*@slow)"

你也可以通過 testConfig.greptestProject.grep 在配置文件中過濾測試。

標註測試

如果你想用比標籤更實質的東西來註釋你的測試,你可以在宣告測試時這樣做。註釋有一個 type 和一個 description 來提供更多上下文,並且在 reporter API 中可用。Playwright 的內建 HTML reporter 顯示所有註釋,除了那些 type_ 符號開頭的註釋。

例如,要用問題 URL 註釋測試:

import { test, expect } from '@playwright/test';

test('test login page', {
annotation: {
type: 'issue',
description: 'https://github.com/microsoft/playwright/issues/23180',
},
}, async ({ page }) => {
// ...
});

您也可以標註一組中的所有測試或提供多個標註:

import { test, expect } from '@playwright/test';

test.describe('report tests', {
annotation: { type: 'category', description: 'report' },
}, () => {
test('test report header', async ({ page }) => {
// ...
});

test('test full report', {
annotation: [
{ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/23180' },
{ type: 'performance', description: 'very slow test!' },
],
}, async ({ page }) => {
// ...
});
});

有條件地跳過一組測試

例如,你可以僅在 Chromium 中執行一組測試,方法是傳遞一個回呼。

example.spec.ts

test.describe('chromium only', () => {
test.skip(({ browserName }) => browserName !== 'chromium', 'Chromium only!');

test.beforeAll(async () => {
// This hook is only run in Chromium.
});

test('test 1', async ({ page }) => {
// This test is only run in Chromium.
});

test('test 2', async ({ page }) => {
// This test is only run in Chromium.
});
});

beforeEach 鉤子中使用 fixme

為了避免執行 beforeEach 鉤子,你可以將註釋放在鉤子本身中。

example.spec.ts

test.beforeEach(async ({ page, isMobile }) => {
test.fixme(isMobile, 'Settings page does not work in mobile yet');

await page.goto('http://localhost:3000/settings');
});

test('user profile', async ({ page }) => {
await page.getByText('My Profile').click();
// ...
});

執行時註釋

在測試已經執行時,你可以添加註釋到 test.info().annotations

example.spec.ts

test('example test', async ({ page, browser }) => {
test.info().annotations.push({
type: 'browser version',
description: browser.version(),
});

// ...
});