Повторное использование JavaScript в Java

У меня есть проблема в моей текущей организации по повторному использованию возможностей, написанных на JavaScript в нашем коде Java. Просто чтобы дать фон:

У нас есть две разные системы автоматизации:

  1. Java с использованием maven - использует Cucumber jvm и selenium с объектной моделью страницы - это в основном поддерживается тестировщиками
  2. Javascript Framework - Пользовательские огурцы JS и селен веб-драйвер - Это поддерживается разработчиками пользовательского интерфейса

Задача здесь заключается в том, что мы хотели объединить обе платформы и повторно использовать возможности между ними. Моя идея заключается в повторном использовании объектов страницы, по крайней мере, элементов и некоторых вспомогательных методов между обеими структурами.

Скажем для примера:

  1. У меня есть элементы страницы, захваченные в Login.js файл и содержит несколько вспомогательных методов, таких как генерация случайного адреса электронной почты.
  2. Я должен быть в состоянии импортировать Login.js файл в моем классе Java, а также должен иметь возможность использовать элементы страницы и вспомогательный метод, написанный на javascript.

Я нашел огуречного носорога, который использовал возможности от java до javascript. Тогда как обратный путь невозможен.

Я могу использовать скриптовый движок Java 8 Nashorn загрузить модули js в java, но то же самое нельзя использовать, если мои модули JS написаны с использованием Node, И да, cucumber.js является модулем узла:(

Я наткнулся на Avatar js, который можно использовать для загрузки узловых модулей в jvm. Но опять же аватар не имеет поддержки Cucumber, Я пытался и потерпел неудачу.

Есть ли способ решить эту проблему?

2 ответа

Прежде всего - забудьте об Аватаре, он на очень старой версии и, кроме того, проект мертв!

Использование узловых модулей в Nashorn возможно, если они не основаны на нативном API. Если вам нужно require() функция, вы можете использовать jvm-npm. Но не забудьте разрешить все (транзитивные) зависимости до того, как самостоятельно или под управлением npm install или аналогичные плагины maven/gradle для разрешения зависимостей npm.

При загрузке модулей NPM в Nashorn, вы должны загрузить что-то вроде nashorn-polyfill.js раньше, потому что есть некоторые переменные, которых нет в Nashorn, поэтому вы должны предоставить их самостоятельно (возможно, вам нужно больше / дополнительные переменные, еще не в моем файле polyfill доступны).

Я не знаю cucumber.js, поэтому не могу дать вам подсказки, как запустить огурец в Нэшорне. Но я бегу React.JS например, в моем Java-коде на стороне сервера, чтобы предварительно отрендерить DOM на сервере и отправить его клиенту. И React.JS также является нетривиальной библиотекой NPM, но она работает как шарм!

Я не уверен, что уже слишком поздно отвечать на этот вопрос. Нашорн заброшен. Также у Nashorn есть проблемы с совместимостью с Node.js.

Я предлагаю взглянуть на Javet, который позволяет приложениям Java взаимодействовать со встроенным Node.js. Я сопровождаю.

Другие вопросы по тегам