如何在 Nightwatch 中遍历 querySelectorAll 结果
How to iterate through querySelectorAll results in Nightwatch
我似乎找不到在 Nightwatch 中遍历节点列表的 innerHTML 的正确语法。我正在尝试 return 包含在页面正文内容中的每个 '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]);
})
我正在测试的页面上有 10 个 link。查询选择器似乎正在检索它们,因为 console.log(tags.value) 打印以下内容:
[ { ELEMENT: '1' },
{ ELEMENT: '2' },
{ ELEMENT: '3' },
{ ELEMENT: '4' },
{ ELEMENT: '5' },
{ ELEMENT: '6' },
{ ELEMENT: '7' },
{ ELEMENT: '8' },
{ ELEMENT: '9' },
{ ELEMENT: '10' } ]
和 console.log(tags.value[9]) 打印:
{ ELEMENT: '10' }
但是,我找不到从这些结果中检索 link 的方法。将 .innerHTML 附加到任何这些变量 returns 'undefined'。我有什么方法可以遍历 querySelectorAll 结果并检索其中的 url 吗?
编辑: 如果我使用以下代码,似乎可以获得相同的结果:
browser.elements("css selector", "div.field-item.even a", function(tags) {
console.log(tags.value);
console.log(tags.value[9]);
})
我最初认为我正在使用节点列表,但我认为我实际上是根据 documentation for the .elements command.[=15 returned 一个 WebElement JSON 对象=]
不过,我仍然无法访问内部文本。有什么想法吗?
我使用不同的方法解决了这个问题。我使用 browser.elements command instead of querySelectorAll, and then used 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);
});
}
})
这会在页面内容中每隔 link 打印一次。
selectAllRoles: function (client) {
client.elements('css selector', '.editorDetail ul li input[type=checkbox]', function(res) {
res.value.forEach(elementObject => {
client.elementIdClick(elementObject.ELEMENT);
});
});
return this;
},
在'css selector'
后面填写你的id
我似乎找不到在 Nightwatch 中遍历节点列表的 innerHTML 的正确语法。我正在尝试 return 包含在页面正文内容中的每个 '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]);
})
我正在测试的页面上有 10 个 link。查询选择器似乎正在检索它们,因为 console.log(tags.value) 打印以下内容:
[ { ELEMENT: '1' },
{ ELEMENT: '2' },
{ ELEMENT: '3' },
{ ELEMENT: '4' },
{ ELEMENT: '5' },
{ ELEMENT: '6' },
{ ELEMENT: '7' },
{ ELEMENT: '8' },
{ ELEMENT: '9' },
{ ELEMENT: '10' } ]
和 console.log(tags.value[9]) 打印:
{ ELEMENT: '10' }
但是,我找不到从这些结果中检索 link 的方法。将 .innerHTML 附加到任何这些变量 returns 'undefined'。我有什么方法可以遍历 querySelectorAll 结果并检索其中的 url 吗?
编辑: 如果我使用以下代码,似乎可以获得相同的结果:
browser.elements("css selector", "div.field-item.even a", function(tags) {
console.log(tags.value);
console.log(tags.value[9]);
})
我最初认为我正在使用节点列表,但我认为我实际上是根据 documentation for the .elements command.[=15 returned 一个 WebElement JSON 对象=]
不过,我仍然无法访问内部文本。有什么想法吗?
我使用不同的方法解决了这个问题。我使用 browser.elements command instead of querySelectorAll, and then used 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);
});
}
})
这会在页面内容中每隔 link 打印一次。
selectAllRoles: function (client) {
client.elements('css selector', '.editorDetail ul li input[type=checkbox]', function(res) {
res.value.forEach(elementObject => {
client.elementIdClick(elementObject.ELEMENT);
});
});
return this;
},
在'css selector'
后面填写你的id