Java.awt.HeadlessException в докере Дженкинс

Я получаю это исключение ниже в моем коде селена, когда я запускаю в нем свои jenkins, которые работают через докер.

Это началось, когда я использовал класс робота для импорта файла для одного из моих сценариев. Когда я запустил свой код в Jenkins, он дает следующее исключение.

Exception: java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it. at sun.awt.HeadlessToolkit.getSystemClipboard(HeadlessToolkit.java:309) at PageObjectRep.QuickHlr.Click_on_Browser(QuickHlr.java:119) at stepDefinations.HLR_LookUp.clickOnBrowser(HLR_LookUp.java:70) at ✽.And Click on browser(Smoke.feature:178)

Примечание. Дженкинс работает в докере. Я заранее ценю вашу помощь.

 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel,null);
    System.out.println("selection" +sel);
    // Wait for 5 seconds
    Thread.sleep(5000);
    System.out.println("Browse button clicked");
    // Create object of Robot class
    Robot robot = new Robot();
    Thread.sleep(1000);
    // Press Enter
    robot.keyPress(KeyEvent.VK_ENTER);
    // Release Enter
    robot.keyRelease(KeyEvent.VK_ENTER);
    // Press CTRL+V
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    // Release CTRL+V
    robot.keyRelease(KeyEvent.VK_CONTROL);
    robot.keyRelease(KeyEvent.VK_V);
    Thread.sleep(1000);
    //Press Enter
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 073
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Быстро ответить

Вы не можете запустить Java-код GUI (графический интерфейс пользователя) в операционной системе без пользовательского интерфейса, такого как серверы, целью которых является запуск приложений в фоновом режиме. Например, вам нужен рабочий стол.

Подробный ответ

Вы можете разделить Java на следующие категории:

Java SE = стандартная версия. Обычно используется для приложений GUI или DESKTOP с такими классами, как JFrame, Robot, Toolkit и т. д.

java se

Кроме того, он содержит множество библиотек и API, которые должен изучить любой Java-программист (java.lang, java.io, java.math, java.net, java.util и т. д.), И они используются в следующей категории.

Для запуска этого приложения требуется оперативная система с пользовательским интерфейсом. Если вы запустите эти приложения в tomcat, на таких серверах, как jenkins, widfly и т. д., Используя ubuntu / debian, solaris и т. д., Некоторые части не будут работать из-за отсутствия зависимостей, которые есть только в операционных системах с пользовательским интерфейсом. Например, java.awt.Robot может перемещать мышь в x.y, но на сервере оболочки нет мыши.

Java EE = Enterprise Edition. Платформа Java (Enterprise Edition) используется для разработки распределенных систем, таких как доступ к базе данных (JDBC, JPA), удаленный вызов методов (RMI), обмен сообщениями (JMS), веб-службы, обработка XML, и определяет стандартные API-интерфейсы для Enterprise JavaBeans, сервлетов. , портлеты, страницы сервера Java и т. д.

jee

В настоящее время эта категория чаще всего используется для разработки корпоративных или корпоративных систем: Apis rest, интеграции, безопасность, микросервисы и т. д. Также используется для разработки серверов, платформ или библиотек, таких как: Tomcat, Jenkins, Pentaho, Mule ESB, Selenium, Spring. , и т.д

Java ME = Micro Edition. Это платформа для разработки приложений для мобильных устройств. Я думаю, что сейчас это устарело из-за Android и других инструментов.

Итак, каково было бы решение этой проблемы?

Sobhit Sharma 25.12.2018 13:58

Решение: не использовать Java-код рабочего стола в Java-коде сервера. Вы используете класс Robot для автоматизации чего-либо на веб-странице или в настольном приложении?

JRichardsz 26.12.2018 16:51

Да, но не знаю, какой еще подход мне следует предпринять для решения этой проблемы.

Sobhit Sharma 27.12.2018 07:15

Расскажите мне о ваших требованиях, чтобы помочь вам. Ваш подход с использованием класса Robot не рекомендуется для веб-приложений. Например, вы можете использовать селен.

JRichardsz 27.12.2018 16:36

В основном я пытаюсь выполнить загрузку файла в моей автоматизации селена с помощью удаленного драйвера. Не удалось сделать из селена, поэтому я использовал класс роботов.

Sobhit Sharma 28.12.2018 06:25

Выгрузка файла возможна с использованием селена. Отметьте это sqa.stackexchange.com/a/12852

JRichardsz 28.12.2018 15:53

@Richardsz вышеуказанное решение не работает для меня. Любая другая работа?

Sobhit Sharma 08.03.2019 04:40

Дай попробую в эти выходные;)

JRichardsz 08.03.2019 16:54

JRichardsz Конечно.

Sobhit Sharma 11.03.2019 06:19

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