Jenkins中Sikuli测试无法找到屏幕图像问题求助
解决Jenkins中Sikuli无法找到屏幕图像的问题
我之前也碰到过几乎一模一样的情况!本地跑mvn test完全正常,一到Jenkins就找不到图像,折腾了好一阵子才搞定。结合我的经验,给你几个排查和解决方向:
1. Jenkins运行环境的屏幕分辨率问题(最常见原因)
从报错信息里的R[0,0 1024x768]@S(0)能看出来,Jenkins运行时的屏幕分辨率是1024x768,而你截图calc.PNG时用的大概率是更高的分辨率(比如1920x1080),这会直接导致Sikuli匹配失败。
解决办法:
Windows系统:
Jenkins默认是以「本地系统账户」运行服务,这个账户没有桌面会话,分辨率会被强制设为低分辨率。你可以:- 打开「服务」管理器,找到Jenkins服务
- 右键选择「属性」,切换到「登录」标签页
- 选择「此账户」,输入一个有桌面权限的本地用户账号(比如你平时登录Windows的账号)
- 重启Jenkins服务,之后构建时就会使用该用户的桌面分辨率
Linux/macOS系统:
需要用虚拟显示服务器Xvfb来模拟高分辨率屏幕:- 先安装Xvfb(比如Ubuntu下
sudo apt-get install xvfb) - 在Jenkins的构建步骤里,先执行启动Xvfb的命令:
Xvfb :1 -screen 0 1920x1080x24 & export DISPLAY=:1 - 再执行
mvn test命令,这样Sikuli就会在1920x1080的虚拟屏幕上寻找图像
- 先安装Xvfb(比如Ubuntu下
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中,避免依赖工作区的绝对路径。
调整路径的建议:
- 把
main-widget文件夹移到src/main/resources下,路径变成src/main/resources/main-widget/calc.PNG - 在代码中通过classpath加载图像,而不是依赖工作区路径:
这样不管Jenkins的工作区路径怎么变,都能正确找到图像文件。Image calcImage = new Image(getClass().getResource("/main-widget/calc.PNG").getPath());
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
相关产品推荐
相关产品推荐

