【问题标题】:Playwright. How to skip all tests in a group if selector not found?剧作家。如果找不到选择器,如何跳过组中的所有测试?
【发布时间】:2023-02-26 04:33:14
【问题描述】:

我正在使用 Playwrightangular 应用程序开发 E2E 测试。我必须确保存在所需的条件选择器才能继续,否则跳过进一步的测试。

换句话说,如果 beforeAll 钩子中的 await page.isVisible('button[id=container]') 条件不满足,我需要跳过组中的所有测试。

问题是只有第一个测试被跳过而第二个测试被通过(这是错误的)。请检查下面的屏幕截图。

这是代码:

test.describe.serial('Products ', () => {
  let page: Page;
  test.beforeAll(async ({ browser, baseURL }) => {
    page = await browser.newPage();
    await page.goto(baseURL as string, opt);

    if (await page.isVisible('button[id=container]')) {
      await page.locator('button[id=container]').click();
    } else {
      console.log('Error: Container tab is not loaded...');
      test.skip();
    }
  });
  test.only('Check if "Menu" tab is available', async () => {
    ... test goes here ...
  });
  test.only('Check if Orders page is available', async () => {
    ... test goes here ...
  });

});

有趣的是,编剧在使用beforeEach hook 时跳过了所有测试,但我想在beforeAll hook 内实现这个结果。

【问题讨论】:

    标签: angular e2e-testing playwright playwright-test angular-e2e


    【解决方案1】:

    这是一个有趣的行为,也许是因为在像 beforeAll 这样的钩子内部,它将它视为单个测试跳过,而在任何钩子或测试之外但在 describe 块内调用它会跳过该块中的所有测试。虽然不确定。

    我提供的第一个解决方案是基于您的意图。你真的想让他们跳过吗?或者它不应该达到那个点并且实际上是失败的并且只是未通过该组中的所有测试?你可以在 beforeAll 中抛出一个错误,像这样:

    throw new Error('Error: Container tab is not loaded...')
    

    或者更好的是,一起摆脱 if else,只允许点击错误,它已经检查了可见性等可操作性,并利用了自动等待。如果您仍然想要自定义错误消息,请将其包装在一个 try catch 块中,在该块中 catch 执行该控制台错误,然后重新抛出该错误。或者先用 custom message option 执行 expect(locator, message).toBeVisible(),这仍然提供自动等待的好处。

    如果您一心想跳过,一个选择是使用您在描述中声明并在 beforeAll 中设置的“标志”/布尔变量,然后关闭所有 tests conditionally skip。不如在 beforeAll 中跳过所有测试那么好,但是应该可以解决问题的解决方法。

    【讨论】:

      猜你喜欢
      • 2023-02-09
      • 2022-11-11
      • 2021-10-08
      • 2022-06-30
      • 2022-01-07
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多