量角器 browser.executeScript 在参数列表后抛出失败:javascript 错误:丢失

问题描述

运行下面的量角器脚本时

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 错误。请帮我解决这个问题。

解决方法

试试

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

要创建多行字符串常量,您应该将字符串括在反引号中,而不是在字符串中使用反斜杠。有关差异,请参阅下面的代码片段。 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 之前有换行符时,您通常不需要分号。

我不太确定,为什么您会收到有关缺少 ) 的错误消息,也许您有其他脚本也失败了?。实际上上面脚本的错误应该是

未捕获的语法错误:意外标记“var”