测试与断言
🌐 Testing & Assertions
验证页面状态并生成 Playwright 定位器。需要 测试 功能。
🌐 Verify page state and generate Playwright locators. Requires the testing capability.
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--caps=testing"]
}
}
}
每个验证工具在成功时返回 Done,失败时返回错误信息,并在生成的代码中记录匹配的 expect(...) 行,这样就可以将通过的序列组装成一个测试。
🌐 Every verify tool returns Done on success and an error message on failure, and records the matching
expect(...) line in the generated code so a passing sequence can be assembled into a test.
验证元素
🌐 Verify elements
browser_verify_element_visible
验证页面上的元素是否可见,通过角色和可访问名称在所有框架中匹配。
🌐 Verify an element is visible on the page, matched by role and accessible name across all frames.
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
role | 字符串 | 是 | 元素的角色,在快照中显示为:- {ROLE} "Accessible Name": |
accessibleName | 字符串 | 是 | 元素的可访问名称,在快照中显示为:- role "{ACCESSIBLE_NAME}" |
→ browser_verify_element_visible { role: "heading", accessibleName: "Dashboard" }
Done
// Generated: await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
→ browser_verify_element_visible { role: "button", accessibleName: "Submit" }
Element with role "button" and accessible name "Submit" not found
browser_verify_text_visible
确认页面上可以看到文本。当元素有角色和名称时,优先使用 browser_verify_element_visible。
🌐 Verify text is visible on the page. Prefer browser_verify_element_visible when the element has a role and name.
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
text | 字符串 | 是 | 要验证的文本,如快照中显示:- role "Accessible Name": {TEXT} 或 - text: {TEXT} |
→ browser_verify_text_visible { text: "3 items left" }
Done
browser_verify_list_visible
核实列表是否包含预期的项目。
🌐 Verify a list contains the expected items.
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
target | string | 是 | 指向列表的精确元素引用 |
element | string | 是 | 可读的人类列表描述 |
items | string[] | 是 | 要验证的项目 |
→ browser_verify_list_visible {
element: "Todo list", target: "e8",
items: ["Buy groceries", "Walk the dog", "Read a book"]
}
Done
browser_verify_value
验证表单元素的值。
🌐 Verify the value of a form element.
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
type | 字符串 | 是 | textbox、checkbox、radio、combobox 或 slider |
target | 字符串 | 是 | 页面快照中的精确元素引用 |
element | 字符串 | 是 | 人类可读的元素描述 |
value | 字符串 | 是 | 要验证的值。对于复选框或单选框使用 "true" / "false" |
→ browser_verify_value { type: "textbox", element: "Email", target: "e3", value: "alice@example.com" }
Done
→ browser_verify_value { type: "checkbox", element: "Accept terms", target: "e9", value: "true" }
Done
生成测试代码
🌐 Generate test code
browser_generate_locator
为一个元素生成 Playwright 定位器,在将探索性自动化转换为测试文件时非常有用。
🌐 Generate a Playwright locator for an element, useful when converting exploratory automation into test files.
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
target | 字符串 | 是 | 元素引用或选择器 |
→ browser_generate_locator { target: "e15" }
getByRole('button', { name: 'Submit' })
→ browser_generate_locator { target: "e3" }
getByLabel('Email')
工作流:探索性测试用于测试代码
🌐 Workflow: exploratory testing to test code
每个工具的响应都包括它执行的操作的 Playwright 代码,语言由 --codegen 设置(默认是 typescript;也可以是 python、java、csharp 或 none)。
🌐 Each tool response includes the Playwright code for the action it performed, in the language set by
--codegen (typescript by default; also python, java, csharp, or none).
→ browser_navigate { url: "https://demo.playwright.dev/todomvc" }
→ browser_type { target: "e5", text: "Buy groceries", submit: true }
// Generated: await page.getByPlaceholder('What needs to be done?').fill('Buy groceries');
// Generated: await page.getByPlaceholder('What needs to be done?').press('Enter');
→ browser_verify_text_visible { text: "Buy groceries" }
// Generated: await expect(page.getByText('Buy groceries')).toBeVisible();
→ browser_click { target: "e10" }
// Generated: await page.getByRole('checkbox', { name: 'Toggle Todo' }).click();
→ browser_verify_text_visible { text: "0 items left" }
// Generated: await expect(page.getByText('0 items left')).toBeVisible();
生成的代码可以被组装成一个 Playwright 测试:
🌐 The generated code can be assembled into a Playwright test:
test('add and complete todo', async ({ page }) => {
await page.goto('https://demo.playwright.dev/todomvc');
await page.getByPlaceholder('What needs to be done?').fill('Buy groceries');
await page.getByPlaceholder('What needs to be done?').press('Enter');
await expect(page.getByText('Buy groceries')).toBeVisible();
await page.getByRole('checkbox', { name: 'Toggle Todo' }).click();
await expect(page.getByText('0 items left')).toBeVisible();
});
工作流程:测试表单验证
🌐 Workflow: testing form validation
→ browser_navigate { url: "https://app.example.com/register" }
→ browser_click { target: "e9" } // Submit empty form
→ browser_verify_text_visible { text: "Email is required" }
Done
→ browser_type { target: "e3", text: "not-an-email" }
→ browser_click { target: "e9" }
→ browser_verify_text_visible { text: "Please enter a valid email" }
Done
→ browser_fill_form {
fields: [
{ name: "Email", target: "e3", type: "textbox", value: "alice@example.com" },
{ name: "Password", target: "e5", type: "textbox", value: "password123" },
{ name: "Confirm password", target: "e7", type: "textbox", value: "password456" }
]
}
→ browser_click { target: "e9" }
→ browser_verify_text_visible { text: "Passwords do not match" }
Done