多个不同元素上的 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')]]
但这当然取决于实现。
我有两个元素不能同时出现在同一页面上。我想制作一个 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')]]
但这当然取决于实现。