我使用Blue Prism的Application Modeller发现了一个输入文本框,并且能够使用下面的XPath成功突出显示文本框:
/ HTML / BODY(1)/ DIV(4)/主(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)/ TBODY(1)/ TR(1)/ TD(1)/ INPUT(1)
我想使用更强大的XPath并实现我尝试使用下面的XPath:
// * [@ ID = “CT”] / DIV / DIV / DIV / DIV [1] / DIV [1] /表/ tbody的[1] / TR / TD /输入[1]
以上XPath在Chrome中正确识别元素,但在蓝色棱镜中尝试相同时收到以下错误消息:
错误 - 突出显示结果 - 未将对象引用设置为对象的实例。
如果我做错了,请告诉我。
答案 0 :(得分:1)
很抱歉回复一个很旧的!我们针对这种情况设计的变通方法(使路径动态化需要太长的循环/搜索时间)是使用Jquery代码段。如果页面使用的是jquery,则可以使用执行javascript函数的蓝色棱镜功能非常快速地执行这些查询。
我们提出了一个增强请求,因为它是极其有用的功能。
更新:正如用户在下面指出的那样,如果可以使用香草js querySelector方法,则使用jquery可能比使用jquery更为安全,并且可以作为将来的证明。
答案 1 :(得分:0)
不幸的是,Blue Prism实际上并没有使用“真实的” XPath,而只是使用了一个极其有限的子集:没有通配符的绝对路径。 (注意:从技术上说,可以将XPath与带有通配符的字符串进行匹配,但这似乎使BP检查了文档中的每个元素,而且速度太慢,几乎从来都不是正确的解决方案。 )
对于无法通过BP应用程序建模器可靠地标识元素的情况(可能是因为它需要复杂或动态的选择器),我的解决方法是注入JS代码段。 JS可以更加可靠地选择元素,然后可以为该元素生成BluePrism路径。
将数据从JS返回到BluePrism并非易事,但是更好的解决方案之一是让JS创建一个<script id="_output">
元素,将JSON放入其中,然后让BluePrism读取该元素的内容。