多个不同元素上的 XPath OR 运算符

XPath OR operator on multiple different elements

我有两个元素不能同时出现在同一页面上。我想制作一个 Xpath 选择器来检查元素 A 或元素 B:

Element A: //div[contains(@class, 'A')]//button[@name='Name123']

Element B: //div[contains(@class, 'B')]//button[@name='Name123']

我认为它会像

那样起作用
("(//div[contains(@class, 'A')]//button[@name='Name123']) OR 
(//div[contains(@class, 'B')]//button[@name='Name123'])")

但这不是有效的 XPath 表达式。

我做错了什么?

去掉多余的护腕,将 OR 替换为 |那么它就会发生。

Driver.FindElement(By.XPath("//div[contains(@class, 'A')]//button[@name='Name123'] | //div[contains(@class, 'B')]//button[@name='Name123']"));

试试这个 xpath:

//div[contains(@class, 'A') or contains(@class, 'B')]//button[@name='Name123']

请注意,如果有很多 div 个元素 class 包含 'A' 或 'B',但只有少数 button 个元素包含 @name是 'Name123',那么以下可能更有效:

//button[@name='Name123'][ancestor::div[@class[contains(.,'A') or contains(., 'B')]]

但这当然取决于实现。