java - 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
}
}
解决方案
评估的结果是一个“org.eclipse.core.runtime.Status”,它是一个对象。这里没问题。
然而,RCPTT(具体来说是 ECL)将尝试将返回值装箱到 EObject 或它支持的任何装箱原语中。请参阅第 143 和 152 行的 box() 方法:
推荐阅读
- jhipster - 创建蓝图时如何覆盖needle API?
- sql - 从表中选择最大日期
- laravel - Laravel Storage::download 在路径中找不到文件
- reactjs - 将 React DirectLine Bot Framework 通道与 SPFX 应用程序定制器一起使用时出错
- javascript - 如何阻止整个 React UI?
- c# - 优雅地捕获加载的动态库中发生的分段错误
- javascript - 如何从字符串日期值和格式中获取数字到美国日期输入
- python - 在 pytorch 中保存具有更新权重的模型
- typescript - Typescript 中的“声明全局”是什么?
- r - 列表优于编号 data.tables