多个HTML结构相同的元素如何实现精准定位?
精准定位重复文本对应元素的XPath方案
加索引限定(适用元素顺序固定的场景)
你当前的XPath用//全局扫描会匹配所有符合规则的元素,给整体表达式加括号后指定索引即可定位指定位置的元素,XPath索引从1开始计数。比如要定位第2个Domain对应的输入框,写法如下:(//mat-label[text()="Domain"]/../../../input)[2]上层唯一父容器限定(适用元素归属模块唯一的场景)
先定位到目标Domain所属的、带唯一特征的上层父容器(比如带唯一id、唯一class、唯一文本的表单块、卡片容器等),再向下搜索Domain对应的输入框,即可过滤其他模块的重复元素。假设目标输入框归属id为custom-domain-block的容器,写法示例://div[@id="custom-domain-block"]//mat-label[text()="Domain"]/../../../input属性特征二次过滤(适用目标输入框有独有属性的场景)
如果目标input元素本身带有和其他重复Domain对应的input不同的属性(比如placeholder、name、ng-model、formcontrolname等Angular常用绑定属性),可以直接在input节点后加属性筛选,示例写法://mat-label[text()="Domain"]/../../../input[@formcontrolname="enterpriseDomain"]相邻元素轴定位(适用目标元素附近有独有特征元素的场景)
利用XPath轴语法匹配目标元素前后的独有特征元素,比如同个表单行内存在唯一的其他标签、按钮、提示文本,通过相邻关系过滤重复元素。
内容的提问来源于stack exchange,提问作者Rahul W

