当前位置: 首页 > 知识库问答 >
问题:

在浏览器中通过xpath查询成功获取属性,但在Robot框架中未成功

东郭瀚玥
2023-03-14

我有一个特定的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查询被破坏吗?

共有2个答案

郭恩
2023-03-14

您的观察是正确的,该关键字似乎删除了最后一个@之后的所有内容。更准确地说,它使用元素定位器与属性名称分离,并通过在最后一个字符处拆分字符串来实现。

再多的转义都无法解决问题,因为代码此时没有进行任何解析。这是执行该操作的确切代码(截至本文撰写时...):

def _parse_attribute_locator(self, attribute_locator):
    parts = attribute_locator.rpartition('@')
    ...

简单的解决方案是删除尾部斜杠,因此xpath如下所示:

//*/div[@class="BarChart"]/... and @class="bar bar1"]@height`
楚墨一
2023-03-14

使用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函数? 问题答案: 默认情