2016-10-06 6 views
0

섹션 헤더가 올바른 순서로 여러 사이트를 테스트하려고합니다. 물론 엘리먼트에서 텍스트를 가져 오는 것을 포함하여 Nightwatch에서는 모든 것이 비동기입니다. 다음 코드는 절대로 호출되지 않는 제한 시간을 발생시킵니다.Nightwatch.js에서 여러 비동기 작업을 기다리는 중

client.url(`www.oneofmyrealestatesites.com`); 
client.waitForElementPresent("body", 5000); 
var _ = require("underscore"); 
// This is the order I expect things to be in 
var expected = ["Homes For Sale", "New Homes", "Apartments & Rentals"]; 
client.elements("css selector", ".listings .module-title .label", function (data) { 
    var listings = []; 
    data.value.forEach(function (element) { 
    client.elementIdText(element.ELEMENT, function (result) { 
     listings.push(result.value); 
    }) 
    }) 
    setTimeout(function() { 
    // Some of the sites have extra sections 
    var diff = _.intersection(listings, expected); 
    client.assert.ok(listings == diff); 
    }, 5000); 
}); 

지연이 아무리 많아도 목록은 항상 비어 있습니다. console.log 목록을 밀어 넣을 때 으로 채워 지므로 문제가되지 않습니다. client.pause도 항상 무시됩니다.

diff를 적용하기 전에 목록을 채우는 방법이 있습니까?

답변

0

나는 이러한 경우 https://github.com/caolan/async 문서에 대한 async 라이브러리를 사용하고 있습니다 : https://github.com/caolan/async/blob/v1.5.2/README.md

var async = require("async"); 

/*use each, eachSeries or eachLimit - check docs for differences */ 
async.eachSeries(data.value, function (element, cb) { 
    client.elementIdText(element.ELEMENT, function (result) { 
     listings.push(result.value); 
     // this job is done 
     cb(); 
    }); 
}, function() { 
    // Some of the sites have extra sections 
    var diff = _.intersection(listings, expected); 
    client.assert.ok(listings == diff); 
}); 
관련 문제