在xpath中指定多个条件

时间:2015-02-15 18:31:46

标签: java selenium xpath selenium-webdriver web-scraping

我想用<td class='blob-code blob-code-addition'> and <td class='blob-code blob-code-deletion'>选择所有标签。所以我试图在这两个谓词之间加入or条件。这是行不通的。但是,如果我只包括其中两个类中的一个。这里有什么问题?语法有问题。

By getChanges = By.xpath("//td[@class='blob-code blob-code-addition'] or  //td[@class='blob-code blob-code-deletion']");

4 个答案:

答案 0 :(得分:5)

您想要指定如下内容:

//td[contains(@class,'deletion') or contains(@class,'addition')]

//td[contains(@class,'blob-code blob-code-addition') or contains(@class,'blob-code blob-code-deletion')]

如果您想进行tag独立搜索,则只需使用

//*[contains(@class,'blob-code blob-code-addition') or contains(@class,'blob-code blob-code-deletion')]

从您的回答看来,您似乎正在尝试连接两个不同的xpath s

但是,此处contians()不是强制性的。你也可以不用这个

//*[(@class='blob-code blob-code-addition') or (@class='blob-code blob-code-deletion')]

答案 1 :(得分:1)

对我有用的是在表达式下使用“ |”表情中的字符-

通过element = driver.findElement(By.xpath(“ // button [@ clas ='xyz'] | // button [@ clas ='abc']”))

我在JAVA + Selenium + Maven项目中使用了上面的表达式

答案 2 :(得分:0)

使用pom: @FindBy(xpath ="//span[contains(@class,'vui-menuitem-label-text') and normalize-space(.) = 'Clone']")

答案 3 :(得分:0)

选择所有标签:

  • <td class="blob-code blob-code-addition">
  • <td class="blob-code blob-code-deletion">

您可以使用以下任一 Locator Strategies

  • 通过带有子句的class属性使用xpath

    //td[@class='blob-code blob-code-addition' or @class='blob-code blob-code-deletion']
    
  • 通过带有 or 子句的单个 class 属性使用 xpath

    //td[contains(@class,'blob-code-addition') or contains(@class,'blob-code-deletion')]
    
  • 通过带有 or 子句的部分 class 属性使用 xpath

    //td[contains(@class,'addition') or contains(@class,'deletion')]