【问题标题】:Unable to identify element in Blue Prism using XPath无法使用 XPath 识别 Blue Prism 中的元素
【发布时间】:2018-07-30 01:40:00
【问题描述】:

我使用 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)/TBODY(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 中尝试相同时收到以下错误消息:

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

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

【问题讨论】:

  • 问题是xpath中间有一个iframe。检查this answer
  • 我也尝试了不同的元素,但它甚至不适用于没有 iframe 的网页。 Blueprism 是否允许使用相对 XPath?
  • 我不相信 Blue Prism 中的 Path 属性与 XPath 兼容。你有没有看到任何相反的文件?
  • 这个 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)/TBODY(1)/TR(1)/TD(1)/INPUT(1) - 我想使用相对 XPath
  • Blue Prism 仅适用于 IE。

标签: xpath blueprism


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    更新:正如用户在下面指出的那样,如果可以使用的话,vanilla js querySelector 方法可能比使用 jquery 更安全且更具前瞻性。

    【讨论】:

    • 这里也一样!我要补充一点,在许多用例中,可以使用没有 jquery 的 vanilla document.querySelector 调用来识别元素。
    • 是的,我们实际上发现最近使用的网站在更新中停止使用 jquery!我怀疑 Jquery 可能仍然需要对输入采取一些奇特的操作,但我会根据这种经验在未来尝试避免它。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多