【问题标题】:writing xpath locator for a link element using xpath axes使用 xpath 轴为链接元素编写 xpath 定位器
【发布时间】:2017-12-06 19:20:14
【问题描述】:

我正在尝试学习 Selenium,并尝试为网页上的“关于我们”链接编写 xpath 定位器 - www.hdfc.com

我可以通过链接来做到这一点:

link=关于我们

我尝试了以下方法,效果很好:

xpath=//a[text()='关于我们']

但我想使用 xpath 轴编写定位器,使其足够灵活。有人可以指出我正确的方向吗?

【问题讨论】:

  • 你想达到什么目的?您是否成功获得了所需的元素,或者您需要该元素的子/父元素?至少看看w3schools.com/xpath/xpath_axes.asp
  • 为什么需要使用 XPath?为什么链接文本定位器不起作用?
  • 链接定位器对我有用,但我试图了解用于遍历 Dom 的 xpath 轴方法。所以只是想弄清楚xoath轴定位器。

标签: selenium xpath


【解决方案1】:

如果您提出了可以使用的最佳选择器是 ID,这是因为 ID(很像类名等)根本不依赖于文档的结构,而是更多地依赖于元素的内容或用途.在这种情况下,你会想要这样的东西:

driver.findElements(By.Id("ic-aboutUs");

一般来说,您应该注意的另一件事是,xpath 表达式被认为是识别元素的一种比使用 CSS 选择器更糟糕的方法,特别是如果您在 IE 中进行测试,因为 xpath 实现不是本机的并且非常减缓。我建议阅读 http://saucelabs.com/resources/selenium/css-selectors 以简要了解一些示例,并且还可能在 http://saucelabs.com/resources/selenium/selenium-xpath-marks-the-spot 范围内查看使用 xpath 的一些负面影响。

【讨论】:

  • 问题是,如果您想在 DOM 中好好地走一走(向上向下),那么您将被 绑定 到 XPath。 CSS 选择器在这里帮不了你。
  • 确实如此,但是使用 xpath 的时间是例外而不是规则,如果有人打算学习一组选择器,我每次都会先投票 CSS。
  • 感谢您的指导。我只是想了解如何使用祖先/后代函数创建 xpath 查询。我已经阅读了关于 xpath 轴的 w3 wiki,但这让我有点迷茫。
【解决方案2】:

使用下面的 xpaths 来检测您网页中的“关于我们”链接

  1. 下面的 xpath 是通过引用直接父节点编写的 //li[@class='expanded']/child::span[text()='关于我们']

  2. 此 xpath 是使用菜单栏的父节点(整个菜单项的父节点)编写的 //ul[@class='menu hdfc-investor']/child::li[contains(.,'About Us')]

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 2016-01-17
    • 2021-02-11
    • 2017-01-07
    • 2016-07-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多