代码之家  ›  专栏  ›  技术社区  ›  Shuffler

使用xpath的c#Selenium RC“OR”语句

  •  0
  • Shuffler  · 技术社区  · 11 年前

    我目前正在使用Selenium RC开发一些测试。我对带有Xpath输入和文本区域的seleniumXpath“OR”语句有问题。切中要害。 我已经设计了2个xpath

    文本区域: //span[text()='{0}']/parent::*/following-sibling::*//textarea

    输入: //span[text()='{0}']/parent::*/following-sibling::*//input

    通常使用Selenium.Type(myXpath,“label=myValue”);这两种xpath都可以正常工作。 问题是当我试图合并它们的时候。无论是输入还是文本区域,我都不会有什么不同,因为这两个方法完全相同,所以我试图将它们与|(或)语句合并。

    //span[text()='{0}']/parent::*/following-sibling::*//textarea|//input
    

    但不幸的是,它不起作用。如果订单为 //textarea|//input 它与文本区域匹配,如果 //input|//textarea 它匹配输入。我尝试了各种组合,但还是一无所获。我是否缺少括号或某些必需的语法?谢谢你的帮助。

    1 回复  |  直到 11 年前
        1
  •  1
  •   Jens Erat    11 年前

    获取所有节点( * ),然后使用谓词测试元素名称以找到您想要的元素名称。

    //span[text()='{0}']/parent::*/following-sibling::*//*[local-name() = 'textarea' or local-name() = 'input']
    

    如果您的XPath引擎不支持 local-name() (这似乎是Selenium的一个问题,请参阅评论),您必须重复完整的语句:

    //span[text()='{0}']/parent::*/following-sibling::*//textarea | //span[text()='{0}']/parent::*/following-sibling::*//input
    

    您尝试使用的查询相当于

    (//span[text()='{0}']/parent::*/following-sibling::*//textarea) | (//input)
    

    这也解释了切换的结果 textarea input .