在 querySelectorAll 的选择器中使用变量
Using a variable inside a selector for querySelectorAll
我正在使用 Nightwatch 编写单元测试脚本,并且我正在尝试遍历页面上多个子元素中包含的任何 'a' 标记。我正在尝试使用 querySelectorAll 来获取每个子项中 'a' 标签的数量,但是当我向选择器引入迭代变量时,该语句似乎不起作用。
正在 for 循环中调用以下函数,并传递 x 变量:
browser.execute(function() {
return document.querySelectorAll("div.field-item.even *:not(a):nth-child(" + x + ") a").length;
},
function(links){
a_total = links.value;
console.log("a total: " + links.value);
});
此上下文中的 x 变量应为 1,但这是代码 returns 无论 x 等于什么:
a total: [object Object]
我不确定为什么它应该返回一个数字却返回一个对象。如果我将 x 变量换成静态数字,它似乎也能正常工作。例如,
return document.querySelectorAll("div.field-item.even *:not(a):nth-child(1) a").length;
给我以下内容:
a total: 2
我不确定为什么选择器 returns 是一个对象。我认为选择器只是一个字符串。为什么当我将变量放入选择器字符串时它似乎不起作用?
看起来问题是因为我没有将 x 传递给 .execute 函数。我找到了 GitHub topic on the issue.
以下代码似乎有效:
browser.execute(function(x) {
return document.querySelectorAll("div.field-item.even *:not(a):nth-child(" + x + ") a").length;
}, [x],
function(links){
console.log("a total: " + links.value);
});
我正在使用 Nightwatch 编写单元测试脚本,并且我正在尝试遍历页面上多个子元素中包含的任何 'a' 标记。我正在尝试使用 querySelectorAll 来获取每个子项中 'a' 标签的数量,但是当我向选择器引入迭代变量时,该语句似乎不起作用。
正在 for 循环中调用以下函数,并传递 x 变量:
browser.execute(function() {
return document.querySelectorAll("div.field-item.even *:not(a):nth-child(" + x + ") a").length;
},
function(links){
a_total = links.value;
console.log("a total: " + links.value);
});
此上下文中的 x 变量应为 1,但这是代码 returns 无论 x 等于什么:
a total: [object Object]
我不确定为什么它应该返回一个数字却返回一个对象。如果我将 x 变量换成静态数字,它似乎也能正常工作。例如,
return document.querySelectorAll("div.field-item.even *:not(a):nth-child(1) a").length;
给我以下内容:
a total: 2
我不确定为什么选择器 returns 是一个对象。我认为选择器只是一个字符串。为什么当我将变量放入选择器字符串时它似乎不起作用?
看起来问题是因为我没有将 x 传递给 .execute 函数。我找到了 GitHub topic on the issue.
以下代码似乎有效:
browser.execute(function(x) {
return document.querySelectorAll("div.field-item.even *:not(a):nth-child(" + x + ") a").length;
}, [x],
function(links){
console.log("a total: " + links.value);
});