在浏览器中通过xpath查询成功获取属性,但在Robot框架中未成功
我有一个特定的XPATH查询,我使用它从某个HTML元素获取高度,当我通过XPATH帮助器插件在Chrome中执行它时,它会完美地返回所需的值在浏览器中通过xpath查询成功获取属性,但在Robot框架中未成功,xpath,svg,selenium-webdriver,robotframework,Xpath,Svg,Selenium Webdriver,Robotframework,我有一个特定的XPATH查询,我使用它从某个HTML元素获取高度,当我通过XPATH帮助器插件在Chrome中执行它时,它会完美地返回所需的值 //*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height 但是,当我在Robot框架中通过Get-Element-Attribute关键字使用相同的查询时 Get Elem
//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height
但是,当我在Robot框架中通过Get-Element-Attribute关键字使用相同的查询时
Get Element Attribute//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height
。。。然后我得到了一个关于这个XPATH的InvalidSelectorException
InvalidSelectorException: Message: u'invalid selector: Unable to locate an
element with the xpath expression `//*/div[@class="BarChart"]/*[name()="svg"]/*
[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/`
因此,机器人框架或Selenium移除了标志及其后的一切。我认为这是一个逃避问题,并在@height之前添加和删除了一些斜线,但没有成功。我还尝试将此查询的结果封装在string()-命令中,但也没有成功
有人有办法防止我的XPATH查询被破坏吗?在使用Robot时,XPATH本身似乎不能包含属性轴。您需要通过XPath检索元素,然后在该元素之外指定属性名。看起来语法是这样的:
Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])@height
//*/div[@class="BarChart"]/... and @class="bar bar1"]@height`
或者(我从未使用过机器人):
说
属性定位器由元素定位器,后跟@符号和属性名称组成,例如“元素”_id@class“
因此,我认为我在上面发布的内容是正确的。您的观察是正确的,该关键字似乎删除了最后一个
@
之后的所有内容。更准确地说,它使用@
将元素定位器与属性名称分开,并通过在最后的@
字符处拆分字符串来实现这一点
再多的转义也解决不了问题,因为代码此时没有进行任何解析。这是执行该操作的确切代码(截至本文撰写时…):
def _parse_attribute_locator(self, attribute_locator):
parts = attribute_locator.rpartition('@')
...
简单的解决方案是删除尾部的斜杠,因此xpath将如下所示:
Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])@height
//*/div[@class="BarChart"]/... and @class="bar bar1"]@height`
嗨,JLRishe,这正是我想要的解决方案。我知道Robot框架中XPATH查询的前缀,但通常不需要放置它。我使用的大多数XPATH查询在没有查询的情况下都可以正常工作,但这一个需要它。无论如何,感谢您的帮助如果您在
@height
之前删除/
,您最初的尝试可能会成功。您收到的错误消息似乎也表明了这一点(它认为/
之前的/
是元素选择器的一部分)。此外,我在网上发现了几个例子,甚至说要使用这个/-符号。@JLRishe你能帮我解决问题吗