在我目前的组织中,我在我们的java代码中重新使用javascript上编写的功能时遇到了挑战。只是为了给出一个背景:
我们有两种不同的自动化框架:
这里面临的挑战是我们希望将两个框架融合在一起,并重新利用两者之间的功能。我的想法是在框架之间重新使用页面对象至少元素和一些辅助方法。
说一个例子:
Login.js
文件中捕获了页面元素,并包含一些辅助方法,例如生成随机电子邮件地址。Login.js
文件,并且应该能够使用用javascript编写的页面元素和辅助方法。我发现黄瓜犀牛使用从java到javascript的功能。而反过来是不可能的。
我可以使用java 8的脚本引擎Nashorn
来加载java中的js模块,但是如果我的JS模块是使用Node
编写的,则不能使用它。是的cucumber.js是节点模块:(
我遇到了Avatar js,可以用来加载jvm中的节点模块。但是,“阿凡达”再次没有对Cucumber
的支持。我尝试过但失败了。
有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
首先 - 忘记阿凡达,这是一个非常古老的版本,另外the project is dead!
在Nashorn中使用节点模块是可能的,只要它们不基于本机API。如果您需要require()
功能,则可以使用jvm-npm。但请务必先解决所有(传递)依赖关系,然后再运行npm install
或类似的maven / gradle插件来解析npm依赖关系。
在Nashorn中加载NPM模块时,你应该先加载nashorn-polyfill.js之类的东西,因为有些变量在Nashorn中不可用,所以你必须自己提供它们(也许,你需要一些更多/更多的变量,还不在我的polyfill文件中。)
我不知道cucumber.js,所以我不能告诉你如何让Nashorn的黄瓜运行。但是我在我的java服务器端代码中运行React.JS
来预渲染服务器上的DOM并将其发送到客户端。而且React.JS也是一个非平凡的NPM lib,但它就像一个魅力!