Day 2:定位策略入门

📅 2026/7/8 1:42:09 👁️ 阅读次数 📝 编程学习
Day 2:定位策略入门

适用人群:已经跑通第一个用例,想学会如何精准找到页面元素
预计耗时:8 分钟
目标:掌握 3 种定位方式 + 多元素处理


为什么要学定位

自动化测试的核心就是让工具找到页面上的元素,然后操作它。

如果定位方式不对,会出现两种报错:

  • 找不到元素— 超时
  • 找到多个— strict mode violation

今天就来解决这两个问题。


认识 3 种定位方法

定位方法适用场景
getByText通过按钮、链接的可见文字定位
getByLabel通过 label 文字定位表单控件
getBylocator通过 CSS / XPath 选择器定位

当页面有多个匹配元素时,用动作方法处理:

动作方法作用
getByFirstlocator取第一个匹配元素
getByLastlocator取最后一个匹配元素
getBylocatorNth / getByTextNth取第 N 个匹配元素(索引从 0 开始)

用到的页面

今天用到 3 个页面:

  1. headingsTest.htm— 多个标题元素,演示 first/last/nth
  2. label.htm— 表单标签,演示 getByLabel
  3. tableTest.htm— 表格数据,演示 getByText 获取单元格内容

headingsTest 页面 — 7 个标题元素,多个重名标签

label 页面 — 表单控件与 label 绑定

tableTest 页面 — 员工表格,单元格有重复值


上传 day02_step.xlsx

文件包含 3 个用例:

用例名目标页面练习重点
headingTestheadingsTest.htmgetByFirstlocator 处理多标签重名
labelTestlabel.htmgetByLabel + getBylocatorNth 绕过重复标签
tableTesttableTest.htmgetByTextNth + getByFirstlocator 处理多匹配单元格


headingTest 用例详解

页面包含 7 个标题元素:

h1: Heading A h2: Heading A h3: Heading A h1: Heading B h2: Heading C h3: Heading D h3: Heading D

多个元素有相同标签名,直接getBylocator h3会报 strict mode(匹配到 3 个),所以改用getByFirstlocator

步骤定位方式定位值动作说明
1navigateTo打开 headingsTest.htm
2getByFirstlocatorh1click取第 1 个 h1(Heading A)
3getByTextHeading Cclick文字唯一(h2),不会报错
4getByFirstlocatorh3click取第 1 个 h3(Heading A)

first 原理:

page.locator("h3") → 匹配 3 个元素(Heading A, Heading D, Heading D) page.locator("h3").first() → 只取第 1 个 → 精确 1 个元素 ✓

这就是处理多元素页面的标准做法。


labelTest 用例详解

页面 label.htm 包含表单控件,通过 label 文字关联到输入框:

步骤定位方式定位值动作动作值
1navigateTolabel.htm
2getBylocatorNthinput[type=“textbox”]||0inputhello
3getByLabelEmailinputtest@test.com
4assertLabel||Label验证页面文字

⚠️踩坑记录:页面上有两个输入框都关联了"Username"标签,getByLabel Username会报 strict mode。改用getBylocatorNth通过 CSS 定位第 1 个文本框即可绕过。Email 只有一个匹配,getByLabel正常使用。


tableTest 用例详解

页面 tableTest.htm 包含员工表格:

步骤定位方式定位值动作说明
1navigateTotableTest.htm
2getByTextNth0-0||0getText获取第 1 个"0-0"单元格文字
3assert0-0||0-0验证内容
4getByFirstlocator#CellWithIdclick点击 id 为 CellWithId 的第 1 个元素

⚠️踩坑记录:表格中有 3 个单元格都显示"0-0",getByText 0-0报 strict mode。改用getByTextNth 0-0||0取第 1 个。同理,多个单元格都有id=CellWithId,用getByFirstlocator #CellWithId取第 1 个。


执行与报告

点击执行,3 个用例依次运行。每个用例都会打开对应的页面并执行操作。

执行完成后查看 HTML 报告,通过为绿色,失败为黄色。

执行结果:3 个用例 13 个步骤全部通过(绿色)


动手练习

  1. 把 getByFirstlocator(“h3”) 改成 getBylocator(“h3”),看会不会报错
  2. 在 labelTest 中把 getByLabel(“Email”) 改成 getByLabel(“Username”),观察报错
  3. 在 tableTest 中用 getByText(“Steven”) 定位员工名,看能否找到唯一元素

下一篇预告:Day 3 — 定位策略进阶,我们将深入讲解 CSS 选择器和 XPath。