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
相关产品推荐
相关产品推荐

