在 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);
});