【问题标题】:java.awt.HeadlessException in docker jenkinsdocker jenkins 中的 java.awt.HeadlessException
【发布时间】:2019-05-22 14:20:29
【问题描述】:

当我在其中运行通过 docker 运行的 jenkins 时,我的 selenium 代码中出现以下异常。

当我使用机器人类为我的一个场景导入文件时,它就开始了。 当我在 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)

注意:Jenkins 在 docker 中运行。 提前感谢您的帮助。

 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);
}

【问题讨论】:

    标签: java selenium docker jenkins awtrobot


    【解决方案1】:

    快速回答

    您不能在没有用户界面的操作系统中运行 GUI(图形用户界面)java 代码,例如目标是在后台模式下运行应用程序的服务器。例如,您需要一个桌面。

    详细解答

    您可以将Java分为以下几类:

    Java SE = 标准版。通常用于具有 JFrame、Robot、Toolkit 等类的 GUI 或桌面应用程序。

    还包含许多任何 Java 程序员都应该学习的库和 API(java.lang、java.io、java.math、java.net、java.util 等)并用于下一个类别。

    要运行此应用程序,需要具有用户界面的操作系统。如果您在 tomcat、jenkins、widfly 等服务器中使用 ubuntu/debian、solaris 等运行此应用程序,则某些部分将无法工作,因为缺少只有用户界面操作系统才有的依赖项。例如,java.awt.Robot 可以将鼠标移动到 x.y,但在 shell 服务器中没有鼠标。

    Java EE = 企业版。 Java 平台(企业版)用于开发分布式系统,如数据库访问(JDBC、JPA)、远程方法调用(RMI)、消息传递(JMS)、 Web 服务、XML 处理,并为 Enterprise JavaBeans、servlet、portlet、Java Server Pages 等定义标准 API...

    目前,该类别最常用于企业或公司系统开发:Apis rest、集成、安全、微服务等。也用于开发服务器、平台或库,例如:Tomcat、Jenkins、Pentaho、Mule ESB、硒、弹簧等

    Java ME = Micro Edition。 这是为移动设备开发应用程序的平台。我认为由于 Android 和其他工具,现在已弃用。

    【讨论】:

    • 那么这个问题的解决方案是什么?
    • 解决方案是:不要在服务器java代码中使用桌面java代码。您是否正在使用 Robot 类来自动化网页或桌面应用程序中的某些内容?
    • 是的,但不知道我应该采取什么其他方法来解决这个问题。
    • 告诉我您的要求,以便为您提供帮助。不建议将您使用 Robot 类的方法用于 Web 应用程序。例如,您可以使用硒。
    • 基本上我正在尝试通过远程驱动程序在我的硒自动化中进行文件上传。无法使用 selenium,所以我使用了机器人类。
    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2022-01-08
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多