0

在我的 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"

我该如何expect使用baseURL

4

3 回答 3

2

尝试使用此断言:例如,将 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');
于 2022-02-19T11:08:34.970 回答
1

除了最后一行之外,您的代码没有任何问题。 page.url()将为您提供当前驱动程序(浏览器,无论是什么)的完整 URL 地址,并且expect(something)toBe(thing)就像 equals 一样,在您的情况下它将失败。

您可以通过以下几种方式断言:

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

于 2022-02-19T17:12:00.043 回答
1

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

const pwaBaseUrl = process.env.NOSLASH_URL;

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

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

于 2022-02-21T23:32:45.923 回答