首页 > 解决方案 > ECL 命令中的 Browser.evaluate 不返回 Object

问题描述

在我的 Eclipse RCP 应用程序中,我使用 SWT 浏览器来显示一个 Web 应用程序。我已经能够使用“调用评估”功能与 DOM 元素交互(即插入文本、选择按钮等)来自动化应用程序的测试。但是,我无法确定如何验证应用程序是否有效。我试图在 ECL 中返回一个 DOM 对象,以便检查该对象并验证应用程序是否正常工作。

这是我试图将值分配给变量的脚本:

with [get-view "Encoder View" | get-control Browser] { get-object | invoke evaluate "document.getElementById('PDX').value;" | let [val obj -input] { format "%s" $obj | show-alert } }

当我执行脚本时,我收到错误“不知道如何将'org.eclipse.core.runtime.Status'类型的值装箱”。我不确定为什么“评估”方法返回类型“状态”。根据文档,它应该返回“对象”。

这可能吗?我错过了什么?

更新

我上面的脚本有 2 个问题:1)我在 javascript 中缺少“return”关键字。2) 我正在从 DOM 中检索不正确的元素。在我修改我的脚本以添加返回并选择正确的元素(单选按钮)后,值将被返回并正确存储在 ECL 变量中。

这是更新的示例:

with [get-view "Encoder View" | get-control Browser] { get-object | invoke evaluate "return document.getElementById('PDXRADIO').checked;" | let [val obj -input] { format "%s" $obj | show-alert } }

标签: javaeclipse-rcpeclipse-rcptt

解决方案


评估的结果是一个“org.eclipse.core.runtime.Status”,它是一个对象。这里没问题。

然而,RCPTT(具体来说是 ECL)将尝试将返回值装箱到 EObject 或它支持的任何装箱原语中。请参阅第 143 和 152 行的 box() 方法:

https://github.com/xored/ecl/blob/master/plugins/org.eclipse.ecl.core/src/org/eclipse/ecl/runtime/BoxedValues.java


推荐阅读