在 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 条件来识别相同的元素的主要内容,如果未能解决你的问题,请参考以下文章