剧作家只为某些文件保存存储状态

Playwright save storage state only for certain files

我目前有一个包含超过 50 个文件的测试包。 49 个文件将使用相同的身份验证,因此我在我的编剧配置文件中设置了以下内容:

                storageState: 'myauth.json',

这允许我存储状态并在所有测试中使用它, 问题变成了我不想在我的一个测试中使用这个状态。如何解决这个问题?

我知道我可以将状态传递给 49 个文件并忽略其中一个,但这似乎是错误的想法。

您可以使用灯具,并将您使用 49 次的灯具设置为默认值。 在这种情况下,当您需要其他身份验证时,只需用关键字“use”覆盖它即可。它在剧作家文档中有描述。 https://playwright.dev/docs/test-fixtures

import { TodoPage } from './todo-page';  //In your case auth1 auth2
import { SettingsPage } from './settings-page';

// Declare the types of your fixtures.
type MyFixtures = {
  todoPage: TodoPage;
  settingsPage: SettingsPage;
};

// Extend base test by providing "todoPage" and "settingsPage".
// This new "test" can be used in multiple test files, and each of them will get the fixtures.
export const test = base.extend<MyFixtures>({
  todoPage: async ({ page }, use) => {
    // Set up the fixture.
    const todoPage = new TodoPage(page);
    await todoPage.goto();
    await todoPage.addToDo('item1');
    await todoPage.addToDo('item2');

    // Use the fixture value in the test.
    await use(todoPage);

    // Clean up the fixture.
    await todoPage.removeAll();
  },

  settingsPage: async ({ page }, use) => {
    await use(new SettingsPage(page));
  },
});

在您的测试页面中使用默认身份验证。 当您需要覆盖特定文件 spec.ts 文件时,只需写入:

test.use({ auth: 'reareAuth' });

如果您不想在第 50 次测试中使用 any storageState,那么您可以在该测试中使用 test.use({ storageState: undefined });

import { test } from '@playwright/test';
import LoginPage from '../../page/LoginPage';

test.use({ storageState: undefined });

test('This test ignores the storageState and performs a fresh login', async ({ page }) => {
  loginPage = new LoginPage(page);
  await loginPage.login();
});