首页 > 解决方案 > 使用 xvfb 在 GitHub 上运行 Java GUI 测试

问题描述

我为我的 Java 桌面应用程序进行了一些基本的自动化 GUI 测试,这些测试在我的 Windows 桌面上运行时可以工作。在 GitHub 上,他们失败了

X11GraphicsEnvironment.java 处的 java.awt.AWTError:-2

我从默认Java CI with Gradle工作流程开始,并添加了一些步骤来尝试设置 xvfb,以便它有一个可以使用的显示器,但它仍然失败。有没有办法可以修改工作流程以便 X11 可用于测试?

name: Java CI with Gradle

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'
    - name: Set up virtual X11
      run: sudo apt-get install xvfb
    - name: Start virtual frame buffer
      run: Xvfb :19 -screen 0 1024x768x16 &
    - name: set display
      run: export DISPLAY=:19
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      run: ./gradlew build

标签: user-interfacegithubautomated-testsgithub-actionsxvfb

解决方案


我最终使用 JUnit 拆分 GUI 测试@Tag,然后添加单独的 gradle 任务:

task nonGuiTest(type: Test) {
    useJUnitPlatform {
        excludeTags 'gui'
    }
}

task guiTest(type: Test) {
    useJUnitPlatform {
        includeTags 'gui'
    }
}

然后在工作流程中

  • build -x test最初运行
  • 然后运行非 GUI 测试
  • 然后使用该GabrielBB/xvfb-action@v1动作设置 xvfb
  • 然后运行 ​​GUI 测试
name: Java CI with Gradle

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      run: ./gradlew build -x test
    - name: headless tests
      run: ./gradlew nonGuiTest
    - name: GUI tests
      uses: GabrielBB/xvfb-action@v1
      with:
        run: ./gradlew guiTest

推荐阅读