0

我目前正在使用 Selenium RC 开发一些测试。我不得不对带有 xpath 输入和 textareas 的 selenium Xpath“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它匹配 textarea 并且如果//input|//textarea它匹配输入。我尝试了各种组合,但仍然没有。我是否缺少括号或一些必需的语法?谢谢大家的帮助。

4

1 回答 1

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

于 2013-02-21T09:48:36.250 回答