2017-06-20 8 views
0

私はangularjsアプリケーションで分度器4.0.14を使用しています。分度器browser.waitは断続的にウェブサイトの実行をブロックします

ローディングバーで30秒かかる非同期呼び出しを行っています。だから私はその時の後に現れる要素を待っている。ローディングバーは常に100%になり、browser.waitのため断続的に100%で立ち往生しますが、ほとんどの場合、私が探している要素を表示して表示します。

そうでない場合は、100%で止まってタイムアウトになり、テストを続行します。分度器でのみ、ブラウザ上で手動で起こりますが、決して固執しません。

it('Should wait for the end of the api call', function() { 
    browser.wait(function() { 
     return $('#loaded i.check').isPresent(); 
    }, 60000); 
    expect($('#score button').isPresent()).toBe(true); 
}, 61000); 

は私が私がbrowser.driver.wait代わりのbrowser.wait、睡眠を使用し、予想される条件「EC」を待ち、implicitlyWaitを使用してみましたが、何も問題は変化しない、trueにignoreSynchronizationを使用しようとしました。ローディングバーに固まって、アプリケーションを続行できないことがあります。

提案がありますか?

編集:分度器の問題ではありません。私は、通常のChromiumブラウザでエラーを手動で再現することができました。

答えて

0

これは簡単です。あなたは要素の中で '100%'のテキストを待つことができます。 ここでは、コードを持っている:

return browser.wait(ExpectedConditions.textToBePresentInElement(element, '100%'), 60000);

あなたがしなければならない唯一のことは、テキストが表示されるはずのオブジェクトでelementを交換することです。

Btw。あなたの期待の主張はchai-as-promiseライブラリの不足のために動作しません。 Similar issue

+0

は実際には、位置要素の約束を解決することになって期待しています。他のライブラリを使わずに、ジャスミンを使用して分度器だけを使ってどこでも動作します。 解決策を100%試してみましたが、やっていませんでした。おそらく100%を待ちますが、100%は本当に素早く表示され、アプリが続行している間は消えてしまうからです。とにかくそれはタイムアウトします。 – bwarff

0

下記のコードを試してください。

var EC=protractor.ExpectedConditions; 
var ele=$('#loaded i.check') 

it('Should wait for the end of the api call', function() { 
browser.wait(EC.visibilityOf(ele),60000,"NOT VISIBLE"); 
expect($('#score button').isPresent()).toBe(true); 
}); 
+0

しようとしましたが、ブラウザ要素が定義されていない場合のように、その外側のvar eleでエラーが発生しました。そしてそれの中で、それはまったく同じように行動し、100%をブロックし、時には働いています。 – bwarff

関連する問題