我有一个特定的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 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删除了@符号及其后的所有内容。我认为这是一个逃避问题,在@高度之前添加和删除了一些斜线,但没有成功。我还尝试将此查询的结果封装在string()-命令中,但也没有成功。
有人有办法防止我的XPATH查询被破坏吗?
您的观察是正确的,该关键字似乎删除了最后一个@之后的所有内容。更准确地说,它使用元素定位器与属性名称分离,并通过在最后一个字符处拆分字符串来实现。
再多的转义都无法解决问题,因为代码此时没有进行任何解析。这是执行该操作的确切代码(截至本文撰写时...):
def _parse_attribute_locator(self, attribute_locator):
parts = attribute_locator.rpartition('@')
...
简单的解决方案是删除尾部斜杠,因此xpath如下所示:
//*/div[@class="BarChart"]/... and @class="bar bar1"]@height`
使用Robot时,您似乎无法在XPath本身中包含属性轴。您需要通过XPath检索元素,然后在其之外指定属性名称。语法似乎是这样的:
Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])@height
或者(我从未使用过机器人):
Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])[1]@height
此文档中说
attribute\u locator包含元素定位器,后跟@符号和属性名称,例如“element_id@class".
所以我认为我在上面发布的内容是正确的。
我正在尝试获取自定义属性(https://laravel.com/docs/5.5/eloquent-mutators#defining-访问器)从查询中删除。 现在我有: 你ser.php 用户控制器。php 返回 所以问题是:有没有办法也获得view\u url属性?(我用()在内部进行了尝试,但失败了) 我还可以只返回角色名,而不是像您在“return”代码中看到的那样返回整个对象吗?(我想
问题内容: 尝试将用户重定向到URL时,它适用于GET请求,但不适用于回发请求。 通过firebug的“网络”窗口,我可以看到回发请求(应引起重定向)完成后浏览器收到的重定向响应。浏览器似乎启动了对重定向URL的GET请求,但实际上并未成功重定向。它保留在同一页面上。 我在JSF服务器端使用。服务器根本没有收到启动的GET请求。但是由浏览器根据服务器的要求启动。我猜问题只是在客户端 谁能解释如何使
可以使用什么Xpath来获取ID在(selenium webdriver)中提到的DIV标记的background-image CSS属性? 例如:(div id=“abc”,style=“width:538px!重要;height:242px!重要;background-image:url(http://test.com/images/abc.png);position:relative;bac
问题内容: 我是nodejs和browserify的新手。我从这个链接开始。 我有文件main.js包含此代码 现在,我使用npm安装uniq模块: 然后,我使用browserify命令将从main.js开始的所有必需模块捆绑到一个名为bundle.js的文件中: 生成的文件如下所示: 将bundle.js文件包含到我的index.htm页面中之后,如何调用logData函数? 问题答案: 默认情