使用最新版本的网络驱动程序和nightwatchjs。
使用下面的代码,我从未在gotTags中获得任何东西。 如果我在一个断点内设置:
browser.elementIdText(element, function (result) {
gotTags.push(result.value);
console.log(result.value);
});
它永远不会破坏它。
我知道查询有效并返回10个元素:
document.querySelector('iframe[src="about:blank"]').contentDocument.querySelectorAll('.gtm-debug-tags-fired-container .gtm-debug-tags-card-title')
代码:
browser
.url(config.url)
.waitForElementPresent('body', 5000)
.waitForElementPresent('iframe[src="about:blank"]', 10000)
.execute(function(){
return document.querySelector('iframe[src="about:blank"]').contentDocument.querySelectorAll('.gtm-debug-tags-fired-container .gtm-debug-tags-card-title')
}, function(elems){
var element;
for (var i = 0; i < elems.value.length; i++) {
element = elems.value[i].ELEMENT;
browser.elementIdText(element, function (result) {
gotTags.push(result.value);
console.log(result.value);
});
}
答案 0 :(得分:2)
文档http://nightwatchjs.org/api#execute说,您错过了第二个(或目前的第三个)参数。
function(elems){
var element;
for (var i = 0; i < elems.value.length; i++) {
element = elems.value[i].ELEMENT;
browser.elementIdText(element, function (result) {
gotTags.push(result.value);
console.log(result.value);
});
}
这部分必须是第三个参数,因为第二个参数是第一个参数中函数的args参数。
所以,我认为它必须像
.execute(function(){
return document.querySelector('iframe[src="about:blank"]').contentDocument.querySelectorAll('.gtm-debug-tags-fired-container .gtm-debug-tags-card-title')
}, [], function(elems){ // added [] here as second parameter
var element;
for (var i = 0; i < elems.value.length; i++) {
element = elems.value[i].ELEMENT;
browser.elementIdText(element, function (result) {
gotTags.push(result.value);
console.log(result.value);
});
}