【问题标题】:Robot Framework anchor tag value is not retrieved未检索到 Robot Framework 锚标记值
【发布时间】:2018-08-22 13:57:48
【问题描述】:
<div class="m-page-nav m-bottom-2" data-hbui="mobile-nav" role="navigation">
<span aria-`enter code here`label="Collapse page navigation" class="a-icon m-page-nav-icon m-page-nav-icon-collapse">expand_more</span>
<span aria-label="Expand page navigation" class="a-icon m-page-nav-icon m-page-nav-icon-expand">expand_more</span>
<button data-scroll-header class="m-page-nav-button"></button>
<div data-gumshoe class="m-page-nav-list">
<a data-scroll href="#intro" tabindex="0">Intro</a>
<a data-scroll href="#courseHeadingDescription" tabindex="0">Enrolment Disclaimer</a>
<a data-scroll href="#admissionRequirements" tabindex="0">Admission Requirements</a>
<a data-scroll href="#programRequirements" tabindex="0">Program Requirements</a>
<a data-scroll href="#professionalOutcomes" tabindex="0">Professional Outcomes</a>
<a data-scroll href="#recognitionMasters" tabindex="0">Recognition of Achievement</a>
<a data-scroll href="#fees" tabindex="0">Program Fees</a>
</div>
</div>

我对机器人框架有点陌生。我正在尝试使用以下 xpath 从href 锚标记值(即Intro)中检索值

//*[@id="pageNavContainer"]/div/div/a[2]/@href

但是当我运行脚本以使用上述 xpath 获取文本时,我收到以下错误:

InvalidSelectorException: Message: invalid selector: The result of the xpath express

我也尝试使用getattribute,但没有成功。 谁能帮我解决这个问题的正确xpath是什么? 提前致谢

【问题讨论】:

  • 我也尝试过使用 getattribute,但它不起作用..也分享此代码
  • 在您提供的 html 示例中,我没有看到任何 id 为 pageNavContainer 的内容。

标签: python selenium xpath selenium-webdriver robotframework


【解决方案1】:

您收到的错误说明了一切 - 您提供的选择器无效;问题来自最后的/@href 构造。

在 XPath 中,可以肯定地使用这种语法来处理特定节点的属性。然而在 Selenium(由 Robotframework 封装)中,定位器必须指向一个元素,而不是它的属性——因此,当它评估您的表达式时,它会抛出异常。

如果您将定位器更改为

//*[@id="pageNavContainer"]/div/div/a[2]

,并使用Get Element Attribute传递href作为目标,你会得到想要的值。

【讨论】:

  • 谢谢大家,我得到了解决方案 xpath=//*[@id="pageNavContainer"]/div/div/a[position() = 1 and @href] 这对我有用
  • 好的; xpath 是“获取具有该位置的 a,它具有 href 属性”
【解决方案2】:

要提取文本Intro,您可以使用以下xpath

//*[@id="pageNavContainer"]//div[@class='m-page-nav m-bottom-2']//div[@class='m-page-nav-list']//following-sibling::a[1]

接下来你可以使用Get Element Attribute来提取href

${HREF}=    Get Element Attribute    ${element_xpath}@href

【讨论】:

  • 这是一个相当不错的 xpath... 第一,它不会返回第一个元素,因为它可能的意图 - 由于 //[], 的优先级 使用following-sibling。它将返回所有a 节点。要获得第一个,必须使用括号:(//*[@id="pageNavContainer"]//div[@class='m-page-nav m-bottom-2']//div[@class='m-page-nav-list']//following-sibling::a)[1]
  • 另外,它本身就太复杂了——我知道你想用following-sibling 的用法做什么,但它会在位置特权之前改变节点集,从而导致出乎意料的评估结果。在直接父子结构中使用// 运算符是次优的。这是一个有点简化的版本 - //*[@id="pageNavContainer"]/div[@class='m-page-nav m-bottom-2']//div[@class='m-page-nav-list']/a[1] - 请注意缺少 (),并且该位置按预期工作。请注意 - 我不是在挑剔,只是喜欢你的表情 - 它引起了我的注意:)
猜你喜欢
  • 2018-08-25
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 2012-02-10
  • 1970-01-01
  • 2019-10-12
  • 2017-04-15
相关资源
最近更新 更多