当前位置: 首页 > news >正文

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。

http://www.jsqmd.com/news/1144719/

相关文章:

  • 堡垒机 Web CLI 部署教程
  • Openclaw 微信渠道总刷屏英文 Thinking?一行 Prompt 搞定!
  • 15个实用的Markdown编辑器,写作体验
  • Java 转大模型开发:后端程序员的升级路线-2468
  • 所谓Skill,不过是包装好的Prompt
  • 支持外挂字幕的视频播放器推荐
  • RAG 2026 实战指南:从朴素检索到高性能Agentic/Graph混合架构
  • Java面向对象核心知识点总结(类与对象、构造方法、Getter/Setter、内存执行机制)
  • 【创新未发表】Matlab实现能量谷优化算法EVO-Kmean-Transformer-BiLSTM负荷预测算法研究
  • 拉普拉斯噪声机制 (ε-DP) 实战:Python 实现 3 种敏感度计算与噪声注入
  • 终极指南:如何使用wwiseutil轻松修改Wwise音频容器
  • 工业现场LED光学测试的稳定的方法
  • Moneta Markets亿汇:风控思路的维度复盘
  • 我花了一周,把一种思考方式做成了 AI Skill
  • 抽帧与截图进阶:精确抽帧、关键帧提取与批量处理
  • 知栈怎么开始用?先按这 6 步走
  • 虚拟文化体验翻译:虚拟体验场景名称的文化适配与多语呈现
  • 图解 Skill 读书笔记(三):任务拆解、功能实现与安全边界
  • 15个实用的API设计工具,Swagger Editor替代
  • 5分钟解锁REPENTOGON:为《以撒的结合》注入无限可能的脚本扩展器
  • PDF转PPT、Markdown其实不用Token,别再浪费了
  • OBS多路推流文章_一个月真实体验
  • 同样的问题,为什么别人能解决,你却被困在原地?
  • Excelize 开源十周年,发布 2.11.0 版本
  • AI 前沿日报 | 2026年07月07日
  • Windows 证书管理:3种存储位置(个人/根/中间)的导入策略与安全影响
  • 从算法工程化角度看空间换时间策略的权衡的技术7
  • 同城运营随笔:好的投流素材,从来都不是念广告
  • D2DX:让经典暗黑破坏神2在现代PC上重获新生的终极解决方案
  • 15个实用的代码混淆工具,Python与Java