You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins中Sikuli测试无法找到屏幕图像问题求助

解决Jenkins中Sikuli无法找到屏幕图像的问题

我之前也碰到过几乎一模一样的情况!本地跑mvn test完全正常,一到Jenkins就找不到图像,折腾了好一阵子才搞定。结合我的经验,给你几个排查和解决方向:

1. Jenkins运行环境的屏幕分辨率问题(最常见原因)

从报错信息里的R[0,0 1024x768]@S(0)能看出来,Jenkins运行时的屏幕分辨率是1024x768,而你截图calc.PNG时用的大概率是更高的分辨率(比如1920x1080),这会直接导致Sikuli匹配失败。

解决办法:

  • Windows系统:
    Jenkins默认是以「本地系统账户」运行服务,这个账户没有桌面会话,分辨率会被强制设为低分辨率。你可以:

    1. 打开「服务」管理器,找到Jenkins服务
    2. 右键选择「属性」,切换到「登录」标签页
    3. 选择「此账户」,输入一个有桌面权限的本地用户账号(比如你平时登录Windows的账号)
    4. 重启Jenkins服务,之后构建时就会使用该用户的桌面分辨率
  • Linux/macOS系统:
    需要用虚拟显示服务器Xvfb来模拟高分辨率屏幕:

    1. 先安装Xvfb(比如Ubuntu下sudo apt-get install xvfb)
    2. 在Jenkins的构建步骤里,先执行启动Xvfb的命令:
      Xvfb :1 -screen 0 1920x1080x24 &
      export DISPLAY=:1
      
    3. 再执行mvn test命令,这样Sikuli就会在1920x1080的虚拟屏幕上寻找图像

2. 检查Sikuli的图像路径是否正确

你当前的图像路径是\Jenkins\workspace\Smoke_Test_Suite\Console\src\main\java\resources\main-widget\calc.PNG,这里有个小问题:Maven的资源文件标准存放路径是src/main/resources(而不是src/main/java/resources),这样Maven会自动把资源打包到classpath中,避免依赖工作区的绝对路径。

调整路径的建议:

  1. 把main-widget文件夹移到src/main/resources下,路径变成src/main/resources/main-widget/calc.PNG
  2. 在代码中通过classpath加载图像,而不是依赖工作区路径:
    Image calcImage = new Image(getClass().getResource("/main-widget/calc.PNG").getPath());
    
    这样不管Jenkins的工作区路径怎么变,都能正确找到图像文件。

3. 调整Sikuli的图像匹配阈值

有时候Jenkins的显示环境(比如颜色深度、DPI设置)和本地不同,哪怕分辨率一致,图像的像素也会有细微差异。你可以降低Sikuli的匹配阈值,让它更“宽容”:

// 默认阈值是0.7,可根据实际情况改成0.6-0.9之间的值
Match match = screen.find(calcImage).similar(0.8);

4. 确保Jenkins有足够的权限访问图形资源

  • Windows下:确保你用来运行Jenkins服务的用户有「交互式登录」权限,并且没有被限制桌面访问
  • Linux下:启动Xvfb时可以加上-ac参数关闭访问控制,避免权限问题:
    Xvfb :1 -screen 0 1920x1080x24 -ac &
    

试试这些方法,我当时就是通过调整Jenkins的运行账户和图像加载路径解决的问题!

内容的提问来源于stack exchange,提问作者user7548672

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:34:59