javascript - 在java中重用javascript

标签 javascript java cucumber nashorn avatarjs

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

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

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

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

举个例子:

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

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

我可以使用java 8的脚本引擎Nashorn来加载java中的js模块,但是如果我的JS模块是使用Node编写的,则无法使用同样的功能。是的,cucumber.js 是节点模块:(

我遇到了Avatar js它可用于加载 jvm 中的节点模块。但同样,Avatar 不支持 Cucumber。我尝试过但失败了。

有什么办法可以解决这个问题吗?

最佳答案

首先 - 忘记阿凡达,它是一个非常旧的版本,另外 the project is dead !

在 Nashorn 中使用节点模块是可能的,只要它们不是基于 native api。如果需要 require() 函数,可以使用jvm-npm 。但请务必先解决所有(传递)依赖项,然后再自行解决或运行 npm install 或类似的 maven/gradle 插件来解决 npm 依赖项。

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

我不了解 cucumber.js,所以我无法向您提供如何在 Nashorn 中运行 Cucumber 的提示。但是我在我的 java 服务器端代码中运行 React.JS 来在服务器上预渲染 DOM 并将其发送到客户端。 React.JS 也是一个不平凡的 NPM 库,但它的工作方式就像一个魅力!

关于javascript - 在java中重用javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35171723/

相关文章:

javascript - 如何为 jquery 对话框应用自定义主题?

java - 检查当前类的实例时,为什么 "x instanceof getClass()"不起作用?

cucumber - 使用 Gems 或 Jenkins(或两者)在多台机器上并行 Cucumber BDD 测试

javascript - 如何设置 cucumber 环境变量

Java 错误捕获问题

cucumber - Cucumber 中的通用步骤定义

javascript - 动态属性访问器

javascript - knockout 装订的 strip 元素

javascript - Node.js 服务器无响应

Java 反射转换方法 ReturnType