【问题标题】:How to write contains expression - Java Selenium如何编写包含表达式 - Java Selenium
【发布时间】:2018-09-07 07:42:43
【问题描述】:

我有两条路:

 driver.findElement(By.xpath("//tr[@id='"+variable+"']/td[5]/span")).click();
 driver.findElement(By.xpath("//tr[@id='"+variable+"']/td[5]")).click();

如何通过包含处理这两个版本,以便搜索第一个或第二个版本 - 具有一个恒定性。

【问题讨论】:

  • 如果你总是点击TD,在SPAN子存在的情况下会起作用吗?

标签: java selenium selenium-webdriver xpath contains


【解决方案1】:
WebElement thingie = driver.findElement(By.xpath("//tr[contains(@id,'" + variable + "')]/td[5]"))

if (thingie.findElements(By.tagName("span")).size() != 0) {
    thingie.findElement(By.tagName("span")).click();
} else {
    thingie.click();
}

创建一个起点WebElement,然后检查<span> 是否存在。如果有,点击span版本,否则直接点击td。

【讨论】:

    【解决方案2】:

    您可以使用管道符号|。管道符号充当从表达式的每个部分返回的元素的联合

    driver.findElement(By.xpath("//tr[contains(@id,'"+variable+"')]/td[5] | //tr[contains(@id,'"+variable+"')]/td[5]/span")).click();
    

    包含看起来没有必要,表达式可以是:

    driver.findElement(By.xpath("//tr[@id='"+variable+"']/td[5]/span | //tr[@id='"+variable+"']/td[5]")).click();
    

    参考: Two conditions using OR in XPATH

    【讨论】:

      【解决方案3】:

      你可以像这样使用正则表达式:

      driver.findElement(By.xpath("[@value='<REGEX>']")).click();
      

      所以xPath 的正则表达式将是(作为字符串):

      "^[//tr\[@id='" + variable + "\]/td\[5\]][/span]?$"
      

      所以你需要把它粘贴进去并且应该可以工作。

      【讨论】:

      • 这个表达式找到第二个路径?没有 /span ?
      • 是的。因为[/span]? 确实意味着“/span”可以出现 0 次或 1 次。所以两者都匹配。
      • 你能用正确完成的正则表达式粘贴路径吗?
      【解决方案4】:

      要重写 xpaths,包括 contains 关键字以及变量表达式,您可以使用以下代码行:

       driver.findElement(By.xpath("//tr[contains(@id,'" + variable + "')]/td[5]/span")).click();
       driver.findElement(By.xpath("//tr[contains(@id,'" + variable + "')]/td[5]")).click()
      

      【讨论】:

      • 你已经更新了它 - 但首先只有第一部分作为他的问题的副本 - NM
      • 我需要一个包含表达式,以便搜索第一个和第二个版本。一种表达方式。
      • 如何同时在两个不同的元素上调用click()?你的具体用例是什么?
      • 元素有 1 或 2 个路径。从不 1 和 2。
      • 它们是两个独立的元素,每个元素都有一个唯一的 xpath
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多