0

在我目前的组织中,我遇到了一个挑战,即在我们的 java 代码中重用用 javascript 编写的功能。只是提供一个背景:

我们有两种不同的自动化框架:

  1. Java 使用 maven - 使用 Cucumber jvm 和 selenium 和页面对象模型 - 这主要由测试人员维护
  2. Javascript 框架 - 用户 cucumber js 和 selenium web 驱动程序 - 这是由 UI 开发人员维护的

这里的挑战是我们想要融合这两个框架并重用两者之间的功能。我的想法是至少在两个框架之间重用页面对象和一些辅助方法。

举个例子:

  1. 我在Login.js文件中捕获了页面元素,并且包含一些辅助方法,例如生成随机电子邮件地址。
  2. 我应该能够Login.js在我的 Java 类中导入文件,并且还应该能够使用用 javascript 编写的页面元素和辅助方法。

我发现的是黄瓜犀牛使用从 java 到 javascript 的功能。而反过来是不可能的。

我可以使用 java 8 的脚本引擎Nashorn在 java 中加载 js 模块,但如果我的 JS 模块是使用Node. 是的 cucumber.js 是节点模块:(

我遇到了Avatar js,它可以用来在 jvm 中加载节点模块。但同样阿凡达没有支持Cucumber。我尝试过,但失败了。

有没有办法解决这个问题?

4

1 回答 1

1

首先 - 忘记 Avatar,它是一个非常旧的版本,另外这个项目已经死了

在 Nashorn 中使用节点模块是可能的,只要它们不基于原生 api。如果需要该require()功能,可以使用jvm-npm。但请务必在您自己或运行npm install或类似的 maven/gradle 插件之前解决所有(传递)依赖项以解决 npm 依赖项。

在 Nashorn 中加载 NPM 模块时,你应该先加载类似nashorn-polyfill.js 的东西,因为有一些变量在 Nashorn 中不可用,所以你必须自己提供它们(也许,你需要更多/其他变量,我的 polyfill 文件中还没有可用)。

我不知道 cucumber.js,所以我无法为您提供如何让黄瓜在 Nashorn 中运行的提示。但React.JS例如,我在我的 java 服务器端代码中运行以在服务器上预渲染 DOM 并将其发送到客户端。React.JS 也是一个不平凡的 NPM 库,但它的工作原理就像一个魅力!

于 2016-02-03T10:45:33.400 回答