Skip to main content

测试与断言

🌐 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.

参数类型是否必填描述
targetstring指向列表的精确元素引用
elementstring可读的人类列表描述
itemsstring[]要验证的项目
→ 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字符串textboxcheckboxradiocomboboxslider
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;也可以是 pythonjavacsharpnone)。

🌐 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