我目前正在使用Selenium RC开发一些测试。我有关于使用xpath输入和textareas的selenium Xpath“OR”语句的问题。明白了。 我设计了2个xpaths
textarea://span[text()='{0}']/parent::*/following-sibling::*//textarea
输入://span[text()='{0}']/parent::*/following-sibling::*//input
通常我使用Selenium.Type(myXpath,“label = myValue”);这两个xpath都可以正常工作。 问题是当我试图合并它们时。如果它是一个输入或textarea,我并没有真正对我产生影响,因为两种方法都非常相似,因此我尝试将它们合并为| (或)陈述。
//span[text()='{0}']/parent::*/following-sibling::*//textarea|//input
但遗憾的是它不起作用。如果订单为//textarea|//input
,则匹配textarea,如果//input|//textarea
匹配输入。我正在尝试各种组合,但仍然没有。我缺少括号或一些必需的语法?谢谢你的帮助。
答案 0 :(得分:1)
获取所有节点(*
),然后使用谓词测试所需节点的元素名称。
//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
的结果。