如何在Nightwatch中迭代querySelectorAll结果

JoP*_*nsy 7 javascript jquery selectors-api nightwatch.js

我似乎无法找到在Nightwatch中迭代nodeList的innerHTML的正确语法.我正在尝试返回页面正文内容中包含的每个"a"标记的网址,但我找不到在Nightwatch中访问querySelectorAll命令结果的方法.

browser.execute(function() {
    return document.querySelectorAll("div.field-item.even a");
},
function(tags){
    console.log(tags.value);
    console.log(tags.value[9]);
})
Run Code Online (Sandbox Code Playgroud)

我正在测试的页面上有10个链接.查询选择器似乎正在检索它们,因为console.log(tags.value)打印以下内容:

[ { ELEMENT: '1' },
  { ELEMENT: '2' },
  { ELEMENT: '3' },
  { ELEMENT: '4' },
  { ELEMENT: '5' },
  { ELEMENT: '6' },
  { ELEMENT: '7' },
  { ELEMENT: '8' },
  { ELEMENT: '9' },
  { ELEMENT: '10' } ]
Run Code Online (Sandbox Code Playgroud)

和console.log(tags.value [9])打印:

  { ELEMENT: '10' }
Run Code Online (Sandbox Code Playgroud)

但是,我找不到从这些结果中检索链接的方法.将.innerHTML附加到任何这些变量都会返回'undefined'.有没有办法让我遍历querySelectorAll结果并检索其中的url?

编辑:如果我使用以下代码,似乎我可以得到相同的结果:

browser.elements("css selector", "div.field-item.even a", function(tags) {
    console.log(tags.value);
    console.log(tags.value[9]);
})
Run Code Online (Sandbox Code Playgroud)

我原本以为我正在使用nodelist,但我认为我实际上是根据.elements命令文档返回了一个WebElement JSON对象.

但是,我仍然无法访问内部文本.有任何想法吗?

JoP*_*nsy 6

我使用不同的方法解决了这个问题.我使用browser.elements命令而不是querySelectorAll,然后使用browser.elementIdAttribute获取每个'a'标记中每个'href'属性的内容.

  //Get an WebElement JSON object array of all urls
  browser.elements("css selector", "div.field-item.even a", function(link_array) {
    for (var x = 0; x < link_array.value.length; x++){
      //Fetch the url from each 'a' tag in the content
      browser.elementIdAttribute(link_array.value[x].ELEMENT, "href", function(links) {
        console.log(links.value);
      });
    }
  })
Run Code Online (Sandbox Code Playgroud)

这将打印出页面内容中的每个链接.