参数列表后的Protractor browser.executeScript throws Failed:javascr



在下运行量角器脚本时

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

尝试

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之前有换行符时,通常不需要分号。

我真的不确定,为什么你会得到一个关于丢失)的错误,也许你有一个不同的脚本也失败了?。实际上,上面脚本中的错误应该是

未捕获的SyntaxError:意外的令牌"var">

最新更新