【问题标题】:Selecting an element with xpath and Selenium使用 xpath 和 Selenium 选择元素
【发布时间】:2011-04-27 18:41:08
【问题描述】:

我的 HTML 基本上如下所示:

...    
  <a class="btnX btnSelectedBG" href="#"><span>Sign in</span></a>
...

Selenium 中的以下 xpath 找不到 元素

//a[contains(text(), 'Sign in') and contains(@class,'btnX')]

Selenium 中的以下 xpath 成功,但对我来说不够具体。

//a[contains(text(), 'Sign in')]
//a[contains(@class, 'btnX')]

为什么 xpath 找不到元素,我该怎么做才能让它工作?

【问题讨论】:

  • //a[contains(text(), 'Sign in')] 不应选择该元素
  • 是的,在两个可行的选项中,我同意第一个应该 not 工作 - 除非它获取子元素的 text() 并加入它们,如JavaScript 可以。但是,当我编造某种模糊逻辑(一旦我使用了特定的“上下文”元素)时,我很难将其与其他测试 except 结合使用这一事实对于表达式,它无法评估该上下文之外的其余表达式。
  • 它会起作用,因为它也在收集子元素的文本。这可能是一种痛苦和一种恩惠:)

标签: selenium selenium-rc xpath


【解决方案1】:

匹配Sign in 直接是a 的子元素或另一个元素的子元素的情况:

//a[包含(@class,'btnX') 和 .//text()='登录']

我是说

&lt;a class="btnX btnSelectedBG" href="#"&gt;Sign in&lt;/a&gt;

&lt;a class="btnX btnSelectedBG" href="#"&gt;&lt;b&gt;Sign in&lt;/b&gt;&lt;/a&gt;

【讨论】:

    【解决方案2】:

    //a[contains(@class,'btnX') 和 span[text()='Sign in']] 不是一个好主意,因为您将在 DOM 中搜索每个锚点,然后尝试将其与您的搜索条件进行比较。

    理想情况下,您希望将 XPath 键入具有 ID 的第一个上升元素,然后沿着树向下工作。

    例如如果你的 html 是

    <div id="foo">   
      <a class="btnX btnSelectedBG" href="#"><span>Sign in</span></a>
    </div>
    

    你可以使用:

    //div[@id='foo']/a[contains(@class, 'btnX')][span[.='Sign in']]
    

    很遗憾,我不知道页面的其余结构,所以我不能给你更具体的信息:

    //a[contains(@class, 'btnX')][span[.='Sign in']]
    

    但它确实不是一个很好的 xpath。

    (我的 XPath 看起来与您略有不同,因为我使用 . 作为 text() 的快捷方式,第二组 [] 作为 and 的快捷方式)

    【讨论】:

    • 我对 .符号以及何时可以使用。谢谢你的例子。
    【解决方案3】:

    对我来说是啊。我认为这是最好的答案,但对其他解决方案持开放态度!

    //a[contains(@class,'btnX') and span[text()='Sign in']]
    

    【讨论】:

    • 当然://a[contains(@class,'btnX') and contains(.,'Sign in')]不要在 XHTML 等混合内容架构中处理文本节点
    • 您确实意识到这在功能上与 //a[contains(@class, 'btnX')][span[.='Sign in']] 相同,而不是使用 an 而我只是把它们分成两个条件:)
    【解决方案4】:

    对于和操作以下几点很重要。

    “and”区分大小写,请勿使用大写“AND”。

    语法://tag[XPath Statement-1 and XPath Statement-2]

    您还可以在这里找到许多其他在 Selenium 中查找 Xpath 的方法:https://www.swtestacademy.com/xpath-selenium/

    【讨论】:

      猜你喜欢
      • 2014-11-02
      • 2020-08-08
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多