菜单是必不可少的组成部分,帮助用户在页面之间跳转。通过自动化测试确保用户点击菜单后能跳转到正确的页面是非常重要的
1. 在桌面端测试菜单
首先,我们可以通过Playwright
的测试生成器快速开始测试。我通常使用Playwright
的VS Code
扩展来生成测试。在VS Code
的测试侧栏中,点击“记录新测试”按钮,这将创建一个test-1.spec.ts
文件,你可以重命名为navigation.spec.ts
。
点击“记录新测试”按钮后,将出现一个浏览器窗口,你可以在其中输入要测试的URL
。Playwright
会记录用户操作并自动生成测试代码。你可以点击菜单中的“About”
链接,Playwright
将自动为你生成以下代码:
import { expect, test } from '@playwright/test';
test(`test`, async ({ page }) => {
await page.goto('/debbie.codes');
await page.getByRole('navigation').getByRole('link', { name: 'About' }).click();
})
接下来,你可以修改测试,添加断言以确保点击后跳转到正确的URL。我们还可以修改page.goto
,将其设置为 /,因为基本URL已经在playwright.config.ts
文件中配置好。
import { expect, test } from '@playwright/test';
test(`menu links to about page`, async ({ page }) => {
await page.goto('/');
await page.getByRole('navigation').getByRole('link', { name: 'About' }).click();
await expect(page).toHaveURL(/about/);
})
2.创建循环测试多个链接
为了测试菜单中的每个链接,我们可以创建一个包含所有链接的数组,然后使用循环来减少重复代码:
import { expect, test } from '@playwright/test';
const links = ['about', 'videos', 'podcasts', 'blog', 'courses']
test('menu links to correct page', async ({ page }) => {
await page.goto('/');
for (const link of links) {
await page.getByRole('navigation').getByRole('link', { name: link }).click();
await expect(page).toHaveURL(link);
}
})
这个测试可以通过VS Code
测试侧栏中的播放按钮运行,并检查所有菜单链接的正确性。
3. 在移动端测试菜单
当我们想在移动端运行相同的测试时,Playwright
允许轻松设置移动视口。在playwright.config.ts
中,已经有注释掉的移动视口配置,我们只需要取消注释:
projects: [
{
name: 'Mobile Chrome',
use: {
...devices['Pixel 5'],
},
},
{
name: 'Mobile Safari',
use: {
...devices['iPhone 12'],
},
},
]
在VS Code
测试侧栏中,你可以点击播放按钮旁边的箭头,选择“默认配置文件”为Mobile Safari
,以便在移动Safari浏览器上运行测试。
4.处理移动端隐藏菜单
在移动设备上,菜单通常通过汉堡菜单隐藏。我们需要告诉Playwright
在移动端点击汉堡菜单以显示导航链接。可以通过isMobile fixture
来实现这一点:
if(isMobile){
await page.getByRole('button', { name: 'open menu' }).click();
}
使用describe
和beforeEach
整理代码 我们可以使用describe
块将测试分组,并通过beforeEach
块简化代码,每个测试执行前都运行beforeEach
中的代码。如下所示:
import { expect, test } from '@playwright/test';
test.beforeEach(async ({ page }) => {
await page.goto('/');
});
test.describe('navigation', () => {
const links = ['about', 'videos', 'podcasts', 'blog', 'courses']
test(`header nav links to correct pages`, async ({ page, isMobile }) => {
for (const link of links) {
if(isMobile){
await page.getByRole('button', { name: 'open menu' }).click();
}
await page.getByRole('navigation').getByRole('link', { name: link }).click();
await expect(page).toHaveURL(link);
}
});
})
通过VS Code
测试侧栏运行此代码,你将看到测试在移动端通过。要在桌面端测试,只需将默认配置文件切换回Chromium
,或者选择“所有配置文件”,即可在桌面和移动设备上运行测试。
小结论
通过介绍,你学习了如何使用Playwright
测试导航菜单,无论是在桌面端还是移动端。借助Playwright
强大的配置和功能,我们能够轻松管理不同设备的自动化测试流程。
5. 生成HTML
报告
在Playwright
中,生成HTML报告非常简单。只需在终端中运行以下命令:
npx playwright show-report
此命令将打开一个浏览器窗口,展示您所有测试的报告。报告中详细列出了测试使用的浏览器、每个测试所需的时间以及测试步骤。您还可以点击每一步查看其详细的执行代码。
6. Trace Viewer
:强大的调试工具
Trace Viewer
是Playwright
中最强大的功能之一,它允许您查看并与测试的trace
文件进行交互。通过Trace Viewer
,您可以逐步查看测试的执行过程、调试问题,甚至查看页面的DOM
快照。
7. 在Playwright
配置中启用Trace
功能
要启用Trace
功能,首先需要修改playwright.config.ts
文件。您可以根据需要选择不同的Trace
选项:
-
•
'off'
:不记录trace
-
•
'on'
:为每个测试记录trace
-
•
'retain-on-failure'
:仅为失败的测试保留trace
-
•
'on-first-retry'
:仅在第一次重试时记录trace
例如,我们将trace
设置为'on'
,以确保每次测试都会生成trace
文件:
const config: PlaywrightTestConfig = {
use: {
trace: 'on'
}
}
export default config;
8.重新生成包含Trace
文件的报告
在生成了新的trace
文件后,您可以再次运行以下命令来查看报告:
npx playwright show-report
这将打开HTML
报告,并在报告底部显示一个包含Trace
文件的部分。点击Trace
链接,将打开一个新的浏览器窗口,展示测试的Trace
。
9. 查看Trace
文件
Trace Viewer
通过一个本地托管的PWA
(渐进式Web
应用)运行,提供了全面的测试信息和可视化分析工具。
-
• 时间轴:顶部的时间轴展示了测试的不同阶段,页面的每个状态都以不同颜色区分,如绿色表示点击操作,红色表示选择操作。
-
• 操作与元数据:左侧栏列出了每个测试动作及其元数据,点击某个动作,您将看到该动作的结果。
-
•
DOM
快照:中间部分显示的是页面的DOM
快照,包含操作前后的页面状态,您可以清楚地看到页面在操作前后的变化。详细信息:右侧显示该动作的选择器、控制台日志、网络请求以及测试的源代码。通过这种方式,您可以对每一步操作进行详细的检查和调试。
10. 交互式DOM
快照
Trace Viewer
中最酷的功能之一是中间的DOM快照不仅仅是静态图像,而是可交互的DOM
快照。您可以滚动页面、点击用户事件,甚至可以在Trace Viewer
内部打开浏览器的开发者工具,非常方便。
结论
Playwright
的Trace Viewer
为测试过程提供了极大的便利,通过详细的交互式视图,您可以更深入地了解测试执行情况并快速发现问题。该工具是通过本地PWA
运行的,所有数据都保存在您的本地环境中,安全可靠。
Playwright
不仅开源且免费使用,其强大的调试功能也使得它成为开发者的理想选择。