Protractor browser.executeScript throws Failed: javascript error: missing ) after argument list

Protractor browser.executeScript throws Failed: javascript error: missing ) after argument list

当运行下面的量角器脚本

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;

我收到 失败:javascript 错误:缺少 ) 参数列表 错误。请帮我解决这个问题。

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

const s1 = "foo \
bar"

const s2 = `foo
bar`

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

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

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 = [];

而下面的代码片段生成了一个有效的脚本

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'

尝试

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;
`)