Jenkins运行Karate 1.2.0测试时screenshot()间歇性抛PolyglotException
Jenkins上Karate测试截图间歇性失败的解决方案
问题详情
- 环境:Karate 1.2.0版本,测试在本地运行正常,Jenkins执行时间歇性失败
- 报错信息:
js failed:
01: screenshot()
<<<<
org.graalvm.polyglot.PolyglotException
com.intuit.karate.driver.DevToolsDriver.screenshot(DevToolsDriver.java:895)
com.intuit.karate.driver.DevToolsDriver.screenshot(DevToolsDriver.java:858)
com.intuit.karate.driver.Driver.screenshot(Driver.java:120)
.:anonymous(Unnamed:1) 相关POM依赖:
<dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-core</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-junit4</artifactId> <version>1.2.0</version> <scope>test</scope> </dependency>
解决方案
1. 升级Karate版本
Karate 1.2.0的DevToolsDriver截图逻辑存在已知稳定性缺陷,后续版本修复了多个无头浏览器截图相关bug。直接升级到最新稳定版,修改POM依赖版本:
<dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-core</artifactId> <version>1.4.1</version> <!-- 替换为最新稳定版 --> </dependency> <dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-junit4</artifactId> <version>1.4.1</version> <scope>test</scope> </dependency>
2. 优化Jenkins无头浏览器配置
Jenkins运行在无头环境,需确保Chrome/Chromium启动参数适配环境,避免渲染异常:
在Karate测试中配置驱动参数:
* configure driver = { type: 'chrome', options: { args: ['--headless=new', '--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage', '--window-size=1920,1080'] } }
关键参数说明:
--headless=new:使用Chrome新无头模式,渲染逻辑更接近真实浏览器,稳定性更高--disable-dev-shm-usage:解决Jenkins容器环境共享内存不足的问题--window-size:固定窗口尺寸,避免动态窗口大小导致的截图异常
3. 添加截图前的渲染等待
间歇性失败多因页面未完全渲染就执行截图,在screenshot()前增加显式等待:
// 等待关键元素加载完成(推荐) * waitFor('//div[@id="page-content"]') // 或固定等待(应急场景使用) * wait(2000) * screenshot()
4. 捕获截图异常避免用例失败
若优化后仍有偶发失败,可在测试中捕获异常,不中断整个用例:
* try { screenshot() } catch(e) { karate.log('截图失败:', e) }
内容的提问来源于stack exchange,提问作者sonal
相关产品推荐
相关产品推荐

