跳到主要内容

Fixtures

Playwright Test 基于 测试夹具 的概念构建。测试夹具用于为每个测试建立环境,为测试提供所需的一切资源且不包含多余内容。

Playwright Test 会检查每个测试声明,分析测试所需的夹具集合,并专门为该测试准备这些夹具。由夹具准备的值会被合并到一个单一对象中,该对象作为第一个参数可供 test、钩子函数、注解和其他夹具使用。

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

test('基础测试', async ({ page }) => {
// ...
});

对于上述测试,Playwright Test 会在运行测试前设置 page 夹具,并在测试完成后将其拆除。page 夹具提供了一个可供测试使用的 Page 对象。

Playwright Test 内置了以下列出的夹具,同时你也可以添加自己的夹具。Playwright Test 还 提供了选项 来配置 fixtures.browserfixtures.contextfixtures.page


属性

browser

添加于: v1.10 fixtures.browser

Browser 实例在 同一工作进程 中的所有测试间共享——这使得测试更加高效。然而,每个测试都在独立的 BrowserContext 中运行,并获得全新的环境。

了解如何 配置浏览器 并查看 可用选项

用法

test.beforeAll(async ({ browser }) => {
const page = await browser.newPage();
// ...
});

类型

browserName

Added in: v1.10 fixtures.browserName

运行测试的浏览器名称。默认为 'chromium'。可用于基于浏览器标注测试

用法

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

类型

  • "chromium" | "firefox" | "webkit"

context

Added in: v1.10 fixtures.context

隔离的 BrowserContext 实例,为每个测试创建。由于上下文之间相互隔离,即使多个测试在单个 Browser 中运行以获得最高效率,每个测试也能获得全新的环境。

了解如何配置上下文并查看可用选项

默认的 fixtures.page 属于此上下文。

用法

test('example test', async ({ page, context }) => {
await context.route('*external.com/*', route => route.abort());
// ...
});

类型


page

Added in: v1.10 fixtures.page

隔离的 Page 实例,为每个测试创建。由于 fixtures.context 的隔离机制,页面在测试之间相互隔离。

这是测试中最常用的 fixture。

用法

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

test('basic test', async ({ page }) => {
await page.goto('/signin');
await page.getByLabel('User Name').fill('user');
await page.getByLabel('Password').fill('password');
await page.getByText('Sign in').click();
// ...
});

类型


request

添加于: v1.10 fixtures.request

为每个测试提供隔离的 APIRequestContext 实例。

用法

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

test('basic test', async ({ request }) => {
await request.post('/signin', {
data: {
username: 'user',
password: 'password'
}
});
// ...
});

类型