javascript 剧作家测试afterEach但某些测试有一个变量

9udxz4iz  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(95)

每个测试都使用await expect(page).toHaveScreenshot();。我不想在每个测试中重复。

test.afterEach(async ({ page }) => {
  await expect(page).toHaveScreenshot({mask: [] as Locator[] || null});
});

有一个问题。一些测试有我需要隐藏的动态元素。我如何为{ mask }提供一个参数/值来处理一些测试中的第一种情况?
我试着给予{ mask }一个值,但没有用:

test('should open sender`s grid view', async ({ page }) => {
  // some code 
  {mask: value }
});
flmtquvp

flmtquvp1#

一种可能的方法是使用不同的describe块来分组不同的掩码:

import {test} from "@playwright/test"; // ^1.30.0

test.describe("with empty mask", () => {
  test.afterEach(async ({page}) => {
    await expect(page).toHaveScreenshot({mask: []});
  });

  test("foo 1", async ({page}) => {
    // ...
  });

  test("foo 2", async ({page}) => {
    // ...
  });
});

test.describe("with p masked", () => {
  test.afterEach(async ({page}) => {
    await expect(page).toHaveScreenshot({
      mask: [page.locator("p")]
    });
  });

  test("bar 1", async ({page}) => {
    // ...
  });

  test("bar 2", async ({page}) => {
    // ...
  });
});

如果你不想要describe块,在测试中有一个更简单的setting a shared variable模式:

import {test} from "@playwright/test";

let mask = [];

test.afterEach(async ({page}) => {
  await expect(page).toHaveScreenshot({mask});
  mask = [];
});

test("foo 1", async ({page}) => {
  // ...
  mask = [page.locator("p"), page.locator("h1")];
});

test("foo 2", async ({page}) => {
  // ...
});

test("foo 3", async ({page}) => {
  // ...
  mask = [page.locator("p")];
});

test("foo 3", async ({page}) => {
  // ...
});

mask = [];行确保空掩码是默认值,如果测试没有覆盖它。
请注意,即使数组为空,[] || null也不会计算为null。如果要提供null作为默认值,请将所有出现的let mask = []mask = []替换为mask = null

tmb3ates

tmb3ates2#

可以使用Regex处理动态元素,以适应许多可能的场景:

//Locator definition with regex
const userInfo = page.locator('.user_Info');
const maskedElements = userInfo
    .filter({ hasText: new RegExp(`^Password Info$`) })

//一些步骤
//使用屏蔽的屏幕截图Assert

await expect(page).toHaveScreenshot({mask: [maskedElements]});

相关问题