RobotFramework:xpath的href被视为“不是有效的XPath表达式”。

时间:2017-07-20 14:32:50

标签: xpath robotframework

第1行确实找到了选择器

Wait Until Element Is visible  xpath=//a[contains(text(),'Download selected certificate')]

然后当我尝试获取href元素时

${url}=    Get Element Attribute   xpath=//a[contains(text(),'Download selected certificate')]/@href

失败了 错误说

InvalidSelectorException:消息:无效的选择器:由于以下错误,无法找到具有xpath表达式// a [contains(text(),'Download selected certificate')] /的元素: SyntaxError:无法对'Document'执行'evaluate':字符串'// a [contains(text(),'Download selected certificate')] /'不是有效的XPath表达式。

我不知道为什么因为我有一个与语法相似的工作无关的例子

${url}=    Get Element Attribute   xpath=//tr[contains(b/span, Jul)][${row_number}]/td[5]/span/a/@href

1 个答案:

答案 0 :(得分:1)

在xpath中,值//a[contains(text(),'Download selected certificate')]/@href将返回一个对象,该对象是该a标记的href属性。

在Selenium2Library中,当调用Get Element Attribute时,@指定属性名称以获取特定dom elelement的值。
那么该关键字的作用是将该字符串拆分为最后一个@,在第一部分获取一个webelement,并检索目标属性(拆分的第二部分)值。
这样做最终会导致元素的定位符为//a[contains(text(),'Download selected certificate')]/ - 并且尾随/会使其成为无效的xpath。

解决方案很简单 - 丢失尾随斜线; e.g:

${url}=    Get Element Attribute   xpath=//a[contains(text(),'Download selected certificate')]@href

至于为什么你的最后一个样本有效 - 它也打败了我:)