在xpath中指定多个条件

6

我想选择所有带有 <td class='blob-code blob-code-addition'><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']");
5个回答

8
您希望指定如下内容:
//td[contains(@class,'deletion') or contains(@class,'addition')]

或者

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

如果您想进行独立于标签的搜索,则可以简单地使用

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

从您的回答中可以看出,您正在尝试连接两个不同的 xpath

然而,在这里并不一定需要使用 contians()。您也可以不使用它。

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

那么我们不能直接使用“or”吗?它必须和包含一起使用吗? - Zack
@Zack 你可以这样做,但不能以//开头。我也使用了or。请查看我的编辑。 - Saifur
是的。但在所有三个解决方案中,您都使用了“contains”。它起作用了。我只是好奇如果没有“contains”为什么不起作用。 - Zack

3

对我有效的表达式是在我的表达式中使用|字符-

通过元素= driver.findElement(By.xpath("//button[@clas='xyz'] | //button[@clas='abc']"))

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


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

0
选择所有具有以下标签的元素:
  • <td class="blob-code blob-code-addition">
  • <td class="blob-code blob-code-deletion">
您可以使用以下任一定位策略
  • 使用xpath通过class属性和or子句:

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

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

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

0

如何在Selenium中为一个元素编写多个XPath

driver.find_elements(By.XPATH, '//div[@class="any-content"]//p|//h3|//figure')

你可以使用“|”模运算符来编写多个标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接