量角器 browser.executeScript 在参数列表后抛出 Failed: javascript error: missing )

Posted

技术标签:

【中文标题】量角器 browser.executeScript 在参数列表后抛出 Failed: javascript error: missing )【英文标题】:Protractor browser.executeScript throws Failed: javascript error: missing ) after argument list 【发布时间】:2021-09-24 10:21:38 【问题描述】:

当运行下面的量角器脚本时

let resultantArr = [];

resultantArr = await browser.executeScript("var elements = document.querySelectorAll('ul[class=\'wbs-droplist-container\'][id*=\'droplist\'] li[class=\'wbs-droplist-item\'][id*=\'droplistitem\']') \
var arr = []; \
for (var i = 0; i < elements.length; i++)  \
  arr.push(elements[i].innerText); \
   \
return arr;")

return resultantArr;

我得到 Failed: javascript error: missing ) after argument list 错误。请帮我解决这个问题。

【问题讨论】:

按照说明尝试使用`:developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/…还有\符号怎么办? @ikiK 反斜杠\ 可以在下一行继续字符串,而实际上字符串中没有换行符。当您使用反引号 ` 将一个字符串跨越多行时,其中会有一个实际的换行符。 @derpirscher 有趣,谢谢,给我的消息。 【参考方案1】:

试试

return await browser.executeScript(`
  var elements = document.querySelectorAll("ul[class='wbs-droplist-container'][id*='droplist'] li[class='wbs-droplist-item'][id*='droplistitem']");
  var arr = [];
  for (var i = 0; i < elements.length; i++) 
    arr.push(elements[i].innerText);
  
  return arr;
`)

【讨论】:

【参考方案2】:

要创建多行字符串常量,您应该将字符串括在反引号中,并且不要在字符串中使用反斜杠。有关差异,请参见下面的代码 sn-p。 s1 将不包含换行符,但 s2 将。

const s1 = "foo \
bar"

const s2 = `foo
bar`

console.log(s1);
console.log(s2);

因此,当应用于您的代码 sn-p 时,您实际上是在创建如下脚本

var script = "var elements = document.querySelectorAll('...') \
var arr = []; \
for (var i = 0; i < elements.length; i++)  \
  arr.push(elements[i].innerText); \
   \
return arr;"

console.log(script);

这是无效的,因为您在其中包含以下内容(注意第二个 var 之前缺少的分号)

var elements = document.querySelector(...)   var arr = [];

而下面的 sn-p 生成一个有效的脚本

var script = `var elements = document.querySelectorAll('...')
var arr = [];
for (var i = 0; i < elements.length; i++) 
  arr.push(elements[i].innerText);

return arr;`

console.log(script);

因为,当您在下一个 var 之前有换行符时,您通常不需要分号。

我不太确定,为什么您会收到关于缺少 ) 的错误,也许您有一个不同的脚本也失败了?实际上,上述脚本的错误应该是

Uncaught SyntaxError: Unexpected token 'var'

【讨论】:

以上是关于量角器 browser.executeScript 在参数列表后抛出 Failed: javascript error: missing )的主要内容,如果未能解决你的问题,请参考以下文章

量角器:向下滚动

执行从InAppBrowser中的executeScript调用的typescript函数

通过 id 定位元素

执行量角器测试时“失败:等待量角器与页面同步时出错”

成功解决后,带有打字稿的量角器找不到模块“量角器”

量角器元素Explorer