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

GebSpock执行js.exec报错最后一个参数需为类字符串类型的问题咨询

报错原因

Geb 提供的 js.exec() 方法的参数顺序与原生 Selenium 的 JavascriptExecutor.executeScript() 完全相反,是触发本次报错的核心原因。
结合你提供的源码可以看到:当传入参数数量大于1时,js.exec() 会取最后一个参数作为JS脚本,前面的所有参数作为注入到脚本的入参。你原有写法将JS脚本放在第一个参数位,最后一个参数是headerContent元素对象,不符合“最后一个参数必须是类字符串类型”的校验规则,直接触发异常。

js.exec() 正确传参语法

js.exec() 要求所有需要注入到JS脚本的参数放在参数列表的前半部分,JS脚本字符串作为最后一个参数传入,通用语法如下:

// 无额外参数:仅传脚本字符串
js.exec("console.log('无参数调用')")

// 有n个额外参数:参数1到参数n放在前面,脚本放在最后
js.exec(参数1, 参数2, ..., 参数n, "JS脚本字符串")

针对你处理Shadow DOM的场景,需要调整参数顺序,同时注意$("content-header")返回的是Geb Navigator对象,需要先取单个元素实例,修正后的代码如下:

// Page/Module 的 content 定义部分
headerContent(wait:true) { $("content-header").first() }
shadowRoot0(wait:true) { js.exec(headerContent, "return arguments[0].shadowRoot") }

多参数传参示例:

def num1 = 10
def num2 = 20
// 两个参数传入脚本,计算和
def sum = js.exec(num1, num2, "return arguments[0] + arguments[1]")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:48:02