如何在 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"
如何将 expect
与 baseURL
一起使用?
尝试改用此断言:
例如,将 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 测试,这是我习惯的。
在我的 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
一起使用?
尝试改用此断言: 例如,将 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 测试,这是我习惯的。