如何在 playwright 中设置 expect 的 baseURL?

How can I set the baseURL for expect in playwright?

在我的 Playwright 测试中,我根据文档设置 base-url

const config: PlaywrightTestConfig = {
  projects: [
    {
      name: 'Safari MacBook Air',
      use: {
        browserName: 'webkit',
        viewport: {
          width: 2560,
          height: 1620,
        },
        contextOptions: {
          ignoreHTTPSErrors: true,
        },
      },
    },
  ],
  use: {
    baseURL: process.env.PLATFORMSH_URL,
    headless: false,
    locale: 'ja-JP',

    // Debugging artifacts.
    screenshot: 'on',
    trace: 'on',
    video: 'on',
  },
};
export default config;

这适用于 goto

await this.page.goto('/myDirectory');

然而,expect失败了:

  expect(page.url()).toBe('/myPage');

错误是:

Expected: "/myPage"
Received: "https://www.example.com/myPage"

如何将 expectbaseURL 一起使用?

尝试改用此断言: 例如,将 Playwright 主页配置为我们的 baseUrl

   {
     name: 'webkit',
     use: {
       ...devices['Desktop Safari'],
       baseURL: 'https://playwright.dev/'
     },
   },

然后:

test('baseUrl', async ({ page }) => {
  await page.goto('/docs/intro');
  await expect(page).toHaveURL('/docs/intro');
});

如果您想继续使用此格式:

  expect(page.url()).toBe('/myPage');

那么您需要更改断言,因为您所在的 url 不等于您的目录。您可以断言您所在的 url 包含上述目录,而不是:

  expect(page.url()).toContain('/myPage');

除了最后一行,你的代码没有任何问题。 page.url() 会给你完整的 URL 地址 驱动程序(浏览器,无论什么)当前是,expect(something)toBe(thing) 就像等于,在你的情况下它会失败。

您可以通过多种方式断言,例如:

等待期望(page.url().includes(partOfUrl)).toBeTruthy();

最后我只是把它包装在我自己的效用函数中:

const pwaBaseUrl = process.env.NOSLASH_URL;

export const assertPath = async (page: Page, path: string) => {
  expect(page.url()).toBe(`${pwaBaseUrl}/${path}`);
};

这保证我在正确的路径上。也许这通常不是必需的,但来自 PHP 的 Behat 测试,这是我习惯的。