# 定位器 > **何时使用**:每次需要在页面上查找元素时。在考虑使用 CSS 或 XPath 之前,请从这里入手。 > **前置知识**:[core/configuration.md](configuration.md) ## 快速参考 ```typescript // 优先级顺序——优先使用第一个能生效的: page.getByRole("button", { name: "Submit" }) // 1. 角色(默认) page.getByLabel("Email address") // 2. 标签(表单字段) page.getByText("Welcome back") // 3. 文本(非交互元素) page.getByPlaceholder("Search...") // 4. 占位符 page.getByAltText("Company logo") // 5. 替代文本(图片) page.getByTitle("Close dialog") // 6. Title 属性 page.getByTestId("checkout-summary") // 7. 测试 ID(最后一个语义选项) page.locator("css=.legacy-widget >> internal:role=button") // 8. CSS/XPath(最后手段) ``` ## 模式 ### 基于角色的定位器(默认选择) **何时使用**:始终如此。这是每个元素的起点。 **何时避免**:当元素没有 ARIA 角色,并且添加角色不在你的控制范围内时。 基于角色的定位器反映了辅助技术识别页面的方式。它们在重构、类名重命名和组件库替换后仍能正常工作。 **TypeScript** ```typescript import { test, expect } from "@playwright/test" test("role-based locators cover most UI elements", async ({ page }) => { await page.goto("/dashboard") // 按钮——匹配