在 Xpath 中使用 OR 条件来识别相同的元素

Posted

技术标签:

【中文标题】在 Xpath 中使用 OR 条件来识别相同的元素【英文标题】:Using an OR condition in Xpath to identify the same element 【发布时间】:2016-04-04 01:56:02 【问题描述】:

我有这个逻辑,它获取当前页面的标题,首先点击下一步按钮,再次获取标题,如果两个标题相同,意味着导航没有移动到下一页,它再次点击下一步。

但是,我的问题是标题元素的 Xpath 不同 - 同一个标题元素有两个 Xpath。一个是一些页面,另一个是其他一些页面。

要么就是这个,

(.//span[@class='g-title'])[2]

.//span[@class='g-title']

那么,我该如何处理呢?

【问题讨论】:

什么是索引'2'。您可以发布您使用的网址吗..? 使用xpath查找页面标题有什么具体原因吗? Selenium Webdriver API 有一种获取页面标题的方法(就像下面关于 Java 绑定的答案中建议的方法)。谢谢。 如果你在 xpath 中寻找 OR (|) 运算符,你可以试试这样 "(.//span[@class='g-title'])[2]|.//span [@class='g-title']" 。我希望这就是你要找的。​​span> 【参考方案1】:

我有一个有趣的见解,我使用这种方法。在我的 python 代码中,我单击了购物车按钮和“|”仅适用于像这样的单独的 xpath 语句...

WebDriverWait(webdriver,20).until(EC.visibility_of_element_located((By.XPATH,"//*[@class='buttoncount-1'] | //button[contains(text(), 'Add to Cart')]")))

btn = webdriver.find_element_by_xpath("//*[@class='buttoncount-1'] | //button[contains(text(), 'Add to Cart')]")

我发现“或”只有在它们共享同一个括号 [] 时才有效

 WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(text(), 'Add to Cart') or contains(text(),'Buy')]"))).click()

既然你在这里。如果您对“和”语句感到好奇,这对我有用...

 WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(text(), 'Continue To Order Rev')][@data-attr='continueToOrderReviewBtn']"))).click()

只需将两个单独的语句配对就足够了。不需要“和”。 注意:这都是在 python 中的。我不知道这将如何转移到java。希望这有点用处。我经历了几次偏头痛才缩小范围。

【讨论】:

【参考方案2】:

您可以使用or,如下所示:

//tr[@class='alternateRow' or @class='itemRow']

【讨论】:

【参考方案3】:

如果元素有两个xpath,那么你可以像下面这样写两个xpath

xpath1 | xpath2

例如://input[@name="username"] | //input[@id="wm_login-username"]

它会选择任何一个xpath

【讨论】:

什么是“和”条件? 这很好,因为您可以将两个完整的 xpath 并排放置,而不必担心其他语法。【参考方案4】:

你可以使用or这样的操作符

(.//span[@class='g-title'])[2] or .//span[@class='g-title']

更多详情:Two conditions using OR in XPATH

【讨论】:

以上是关于在 Xpath 中使用 OR 条件来识别相同的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用selenium和python创建具有相同xpath的元素列表?

具有特定值的任何属性的所有元素的 XPath?

XPath 命令为子元素和孙元素提供条件

python - 查找包含字符串的元素的xpath

处理具有相同 XPath 的多个 XML 元素

如何设置使用tag和id作为Katalon Studio记录功能的默认值?