2016-10-06 12 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をアサートする前にリストにデータが入力されていることを確認する方法はありますか?

私はこのような場合のために https://github.com/caolan/async ドキュメント asyncライブラリを使用してい

答えて

0

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); 
}); 
関連する問題