Fixtures
Playwright Test 基于 test fixtures(测试夹具) 的概念。测试夹具用于为每个测试建立环境,仅向测试提供其所需的内容。
Playwright Test 会检查每个测试声明,分析该测试所需的夹具集,并专门为该测试准备这些夹具。由夹具准备的值会被合并成一个单一对象,作为第一个参数提供给 test、钩子(hooks)、注解(annotations)以及其他夹具。
import { test, expect } from '@playwright/test';
test('basic test', async ({ page }) => {
// ...
});
基于上述测试,Playwright Test 将在运行测试前设置 page 夹具,并在测试结束后将其拆除。page 夹具提供了一个可供测试使用的 Page 对象。
Playwright Test 附带了如下所列的内置夹具,你也可以添加自己的夹具。Playwright Test 还 提供了选项 来配置 fixtures.browser、fixtures.context 和 fixtures.page。
属性
browser
新增于: v1.10Browser 实例在同一个 worker 中的所有测试之间共享 —— 这使得测试效率更高。然而,每个测试都在一个隔离的 BrowserContext 中运行,并获得一个全新的环境。
用法
test.beforeAll(async ({ browser }) => {
const page = await browser.newPage();
// ...
});
类型
browserName
新增于: v1.10运行测试的浏览器名称。默认为 'chromium'。可用于基于浏览器对测试进行注解。
用法
test('skip this test in Firefox', async ({ page, browserName }) => {
test.skip(browserName === 'firefox', 'Still working on it');
// ...
});
类型
- "chromium" | "firefox" | "webkit"
context
新增于: v1.10为每个测试创建的隔离 BrowserContext 实例。由于上下文在彼此之间是隔离的,每个测试都会获得一个全新的环境,即使多个测试在同一个 Browser 中运行,也能实现最高效率。
默认的 fixtures.page 属于此上下文。
用法
test('example test', async ({ page, context }) => {
await context.route('*external.com/*', route => route.abort());
// ...
});
类型
page
新增于: v1.10为每个测试创建的隔离 Page 实例。由于 fixtures.context 的隔离性,页面在测试之间也是隔离的。
这是测试中最常用的夹具。
用法
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为每个测试提供的隔离 APIRequestContext 实例。
用法
import { test, expect } from '@playwright/test';
test('basic test', async ({ request }) => {
await request.post('/signin', {
data: {
username: 'user',
password: 'password'
}
});
// ...
});
类型