【问题标题】:c# Selenium RC "OR" statement using xpathc# Selenium RC "OR" 语句使用 xpath
【发布时间】:2013-02-21 09:25:14
【问题描述】:

我目前正在使用 Selenium RC 开发一些测试。我不得不对带有 xpath 输入和 textareas 的 selenium Xpath“OR”语句提出问题。言归正传。 我设计了 2 个 xpaths

文本区域://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,它匹配输入。我尝试了各种组合,但仍然没有。我是否缺少括号或一些必需的语法?谢谢大家的帮助。

【问题讨论】:

    标签: xpath selenium rc


    【解决方案1】:

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

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

    如果您的 XPath 引擎不支持 local-name()(这似乎是 Selenium 的问题,请参阅 cmets),您将不得不重复完整的声明:

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

    您尝试使用的查询相当于

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

    这也说明了切换textareainput的结果。

    【讨论】:

    • 不幸的是它对我不起作用。我收到一个错误:Selenium.SeleniumException : ERROR: Invalid xpath [3]: XPath parse error //span[text()='Uwagi']/parent::*/following-sibling::*//(textarea |input): // 相对位置路径 // Expr
    • 抱歉,错过了我们最好为 Selenium 使用 XPath 1.0。更新了答案,这个现在应该可以正常工作了。
    • 我收到服务器错误,尚未实现:Xpath function local-name()
    • 如果您不使用命名空间,请尝试改用name()。如果这也不起作用,您将不得不在 | 之后重复整个 XPath 语句。
    • 不幸的是,名称也不起作用。我查看了 Xpath 命名空间,看看我是否可以让它更优雅。现在我刚刚使用 |两个xpaths。感谢您的时间和帮助。干杯!
    猜你喜欢
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2011-06-09
    • 2013-02-10
    相关资源
    最近更新 更多