在selectorSelectorAll

时间:2015-11-09 19:14:42

标签: javascript jquery jquery-selectors iteration nightwatch.js

我正在使用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,但无论x等于什么,这都是代码返回的内容:

a total: [object Object]

我不确定为什么它应该在返回一个数字时返回一个对象。如果我将我的x变量替换为静态数字,它似乎也很奇怪。例如,

return document.querySelectorAll("div.field-item.even *:not(a):nth-child(1) a").length;

给我以下内容:

a total: 2

我不确定选择器返回对象的原因。我认为选择器只是一个字符串。当我将变量放入选择器字符串时,为什么它似乎不起作用?

1 个答案:

答案 0 :(得分:1)

看起来问题是因为我没有将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);
});