【问题标题】:Using an OR condition in Xpath to identify the same element在 Xpath 中使用 OR 条件来识别相同的元素
【发布时间】: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>

标签: selenium xpath selenium-webdriver


【解决方案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

      【讨论】:

        猜你喜欢
        • 2014-08-08
        • 1970-01-01
        • 2015-08-17
        • 2018-03-18
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 2018-07-30
        相关资源
        最近更新 更多