Повторное использование JavaScript в Java
У меня есть проблема в моей текущей организации по повторному использованию возможностей, написанных на JavaScript в нашем коде Java. Просто чтобы дать фон:
У нас есть две разные системы автоматизации:
- Java с использованием maven - использует Cucumber jvm и selenium с объектной моделью страницы - это в основном поддерживается тестировщиками
- Javascript Framework - Пользовательские огурцы JS и селен веб-драйвер - Это поддерживается разработчиками пользовательского интерфейса
Задача здесь заключается в том, что мы хотели объединить обе платформы и повторно использовать возможности между ними. Моя идея заключается в повторном использовании объектов страницы, по крайней мере, элементов и некоторых вспомогательных методов между обеими структурами.
Скажем для примера:
- У меня есть элементы страницы, захваченные в
Login.js
файл и содержит несколько вспомогательных методов, таких как генерация случайного адреса электронной почты. - Я должен быть в состоянии импортировать
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. Я сопровождаю.