0

我已经使用 Blue Prism 的 Application Modeller 发现了一个输入文本框,并且能够使用以下 XPath 成功突出显示该文本框:

/HTML/BODY(1)/DIV(4)/main(1)/DIV(1)/DIV(1)/DIV(1)/DIV(2)/DIV(1)/DIV(1)/DIV( 2)/IFRAME(1)/HTML/BODY(1)/DIV(2)/FORM(1)/DIV(3)/TABLE(2)/TBODY(1)/TR(1)/TD(1)/ DIV(1)/DIV(1)/DIV(1)/DIV(2)/DIV(1)/DIV(1)/DIV(1)/DIV(1)/DIV(1)/DIV(1)/ DIV(1)/DIV(1)/DIV(1)/SPAN(1)/DIV(1)/DIV(2)/DIV(1)/DIV(1)/DIV(1)/DIV(1)/ DIV(1)/TABLE(1)/TBBODY(1)/TR(1)/TD(1)/INPUT(1)

我想使用更健壮的 XPath,并尝试使用以下 XPath:

//*[@id="CT"]/div/div/div/div[1]/div[1]/table/tbody[1]/tr/td/input[1]

上面的 XPath 在 Chrome 中正确识别了元素,但在 Blue Prism 中尝试相同时收到以下错误消息:

错误 - 突出显示结果 - 对象引用未设置为对象的实例。

如果我做错了什么,请告诉我。

4

3 回答 3

1

抱歉回复了一个很老的问题!我们为这种情况设计的解决方法(使路径动态化需要太长的循环/搜索)是使用 Jquery 片段。如果页面使用 jquery,使用执行 javascript 函数的蓝色棱镜功能非常快速地执行这些查询是微不足道的。

我们提出了一个增强请求,因为它是非常有用的功能。

更新:正如用户在下面指出的那样,如果可以使用,vanilla js querySelector 方法可能比使用 jquery 更安全,更面向未来。

于 2019-01-02T15:58:19.757 回答
0

不幸的是,Blue Prism 实际上并没有使用“真正的”XPath,而只是使用了一个极其有限的子集:没有通配符的绝对路径。(注意:技术上可以将 XPath 与带有通配符的字符串进行匹配,但这似乎会导致 BP 检查文档中的每个元素,而且速度非常慢,几乎不是正确的解决方案。)

对于无法通过 BP 应用程序建模器可靠识别元素的情况(可能是因为它需要复杂或动态的选择器),我的解决方法是注入一个 JS 片段。JS 可以更可靠地选择元素,然后可以为该元素生成 BluePrism 路径。

从 JS 向 BluePrism 返回数据并非易事,但更好的解决方案之一是让 JS 创建一个<script id="_output">元素,将 JSON 放入其中,然后让 BluePrism 读取该元素的内容。

于 2019-01-24T10:11:01.333 回答
0

Blue Prism 不完全支持 XPath 规范;唉,您在这里尝试使用的构造不起作用。

或者,您可以将Path应用程序建模器条目的属性设置为 Dynamic,这允许您从流程/对象级别插入动态参数以精确定位您想要与之交互的元素。

于 2018-02-26T05:01:27.430 回答