分度器テストで非同期を使用して待機するにはどうすればよいですか?
it('test async', function(){
var value = 0;
function asyncAction() {
return browser.driver.wait(()=>true)
.then(function () {
console.log('a');
return value++;
});
}
//-Problem Area-
async function doAwait(){
await asyncAction();
return asyncAction();
}
doAwait();
protractor.promise.controlFlow().execute( () => {
console.log('b');
expect(value).toBe(2);
});
});
ここでの出力は
期待関数doAwait(){await asyncAction();の時点で値は1です。asyncAction();を返します。}
私はこれを次のように考えるのが好きです
function doAwait(){
asyncAction().then(()=>asyncAction());
}
これは機能しますが、上記の非同期doAwaitは機能しません。これは、ジェネレーターがセレンの制御フローを壊すためだと思います。
これを分度器構成に追加すると機能します。
var webdriver = require.main.require('selenium-webdriver');
Promise = webdriver.promise.Promise;
Object.assign(Promise, webdriver.promise);
Promise.resolve = Promise.fulfilled;
Promise.reject = Promise.rejected;
すべての約束が管理された約束であるとは限らないかもしれませんが?
他のソリューションでは、各非同期関数をラップする必要があることに注意してください。
protractor.promise.controlFlow().execute( async () => {
await asyncAction();
return asyncAction();
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加