使用robot函数时无头模式运行UI/API混合自动化脚本问题咨询
无头模式运行自动化脚本两类问题解决方案
1. Chrome无头模式下Robot类图像点击、输入操作失效修复
根因
旧版Chrome无头模式未加载完整图形渲染栈,且无实体桌面输出,Robot类依赖的系统级截屏、系统键鼠模拟逻辑无法获取有效页面画面、无法在无桌面环境下触发输入事件,直接导致操作失败。
可行操作步骤
- 升级Chrome及对应driver到112及以上版本,替换旧无头模式配置为新版全功能无头模式,配置代码如下:
configure driver = { type: 'chrome', headless: 'new', args: ['--window-size=1920,1080', '--disable-gpu', '--no-sandbox', '--hide-scrollbars'] }
新版无头模式和有头模式共用同一套渲染引擎,页面渲染效果和有头模式完全一致,可输出符合图像匹配要求的页面截图。
- 修改Robot类数据源配置:将默认的系统截屏源替换为当前Chrome实例的页面截屏接口,避免无桌面环境下系统截到黑屏;将系统级键鼠模拟逻辑替换为Chrome DevTools Protocol的输入事件派发接口,匹配到图像对应坐标后,直接通过CDP向页面派发鼠标点击、键盘输入事件,绕开系统输入层的限制。
- 图像匹配阈值可在原有基础上下调3%-5%,抵消无头模式下渲染抗锯齿带来的细微画面差异,降低匹配失败概率。
2. 同Feature文件混合API+UI场景无头模式运行异常修复
根因
默认执行逻辑会将所有步骤都绑定到浏览器driver实例执行,API场景本身不需要浏览器上下文,执行时触发driver相关调用就会抛错,和是否无头模式无直接关联,只是无头模式下driver的接口校验更严格,报错更明显。
可行操作步骤
- 给步骤增加标签路由逻辑:不需要拆分feature文件,在编写步骤时给API类步骤加
@api标记,UI类步骤加@ui标记,执行器做分支判断:- 命中
@api标记的步骤,直接调用HTTP请求客户端发起接口调用,全程不触发driver相关操作,接口返回值统一存入全局上下文变量池 - 命中
@ui标记的步骤,在步骤执行前检查无头driver是否初始化,未初始化则按前述新版无头配置启动driver,执行UI操作时需要用到的API返回值直接从全局上下文变量池取值填入对应字段即可
- 命中
- 调整driver初始化时机:不要在整个feature执行前就强制启动driver,延迟到第一个UI步骤执行前再初始化,避免API步骤执行阶段提前加载driver上下文导致异常。
- 跨步骤传参直接用全局上下文变量承接即可,不需要做额外的文件拆分,API和UI步骤在同一个feature里混排、顺序执行都可以正常运行。
内容的提问来源于stack exchange,提问作者oliver
相关产品推荐
相关产品推荐

