无法使用Nightwatchjs从网页获取值

时间:2016-07-06 14:05:40

标签: javascript selenium automated-tests nightwatch.js

使用最新版本的网络驱动程序和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);
                    });
                }

1 个答案:

答案 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);
                });
            }