2017-05-04 10 views
1

角度1.6.3のウェブサイトで分度器4.0.14を使用しています。2つの同一の分度器テストが連続して2回目に失敗しました

私は同じテストを2回実行します。最初のものは成功しますが、2番目のものは成功しません。何か案が ?

it('Should return a toast error on inferior amount', function() { 
    $$('#purposeList input.amount').first().clear().sendKeys('4999'); 
    $$('button[type="submit"]').get(0).click(); 
    expect($('div.toast.toast-error').isPresent()).toBe(true); 
    element.all(by.model('purpose.amount')).first().clear(); 
    $$('button.toast-close-button').each(function (item) { 
     item.click(); 
    }); 
    expect($('button.toast-close-button').isPresent()).toBe(false); 
}); 

it('Should return a toast error on inferior amount BIS', function() { 
    $$('#purposeList input.amount').first().clear().sendKeys('4999'); 
    $$('button[type="submit"]').get(0).click(); 
    expect($('div.toast.toast-error').isPresent()).toBe(true); 
    element.all(by.model('purpose.amount')).first().clear(); 
    $$('button.toast-close-button').each(function (item) { 
     item.click(); 
    }); 
    expect($('button.toast-close-button').isPresent()).toBe(false); 
}); 

フィールドには間違った金額が入力されているため、送信時にトーストエラーが発生します。手動で行うと、トーストエラーが発生します。分度器でそれを行うとき、同じテストの最初のものだけが通過します。もう一方では、トーストは決して発射されないか、または本当にすぐに閉じられるように見えます。

私は眠ってみましたが、ブラウザの待機でignoreSynchronisationしました。エラートーストを扱うサービスで$タイムアウトを$ intervalに置き換えようとしましたが(他の$タイムアウトが存在する可能性もあります)。それは何も変わらなかった。

それは実際に失敗し、エラーからの実際の助けがない第二、それを期待して最初のですが、それだけで偽の代わりに、真の期待です:

Message: 
Expected false to be true. 

編集:

だから、@ LostJonは、すべての約束を処理することによって、あなたは次のような意味ですか:

it('Should return a toast error on inferior than authorized purpose amount on step 1 BIS', function() { 
    $$('#purposeList input.amount').first().clear().then(function() { 
     $$('#purposeList input.amount').first().sendKeys('4999').then(function() { 
      $$('button[type="submit"]').get(0).click().then(function() { 
       expect($('div.toast.toast-error').isPresent()).toBe(true); 
       element.all(by.model('purpose.amount')).first().clear().then(function() { 
        $$('button.toast-close-button').each(function (item) { 
         item.click(); 
        }).then(function() { 
         expect($('button.toast-close-button').isPresent()).toBe(false); 
        }); 
       }); 
      }); 
     }); 
    }); 
}); 

私は同じ結果を試しました。

編集:

どうやらそれは前の待機の代わりに、中にあったignoreSynchronization =本当でした。私はbrowser.manage().timeouts()。implicitlyWait(2000)も設定していますので、同期を取らずに要素を待っていましたが、正確ではありませんでした。

+1

質問に追加情報を追加できますか? 最初のクリック後に何が起こるか、サンプルHTML、どこで失敗したか、コンソールに表示されたエラーなど –

+0

どちらが失敗したか最初に特定できますか?あなたは2つを区別するためにconsole.logを置くことができます –

答えて

0

ignoreSynchronization = trueの代わりに、以前の待機中でした。私はbrowser.manage().timeouts()。implicitlyWait(2000)も設定していますので、同期を取らずに要素を待っていましたが、正確ではありませんでした。

1

ですから、以下の行は約束を返します。

$$('button[type="submit"]').get(0).click(); 

あなたはclick()から約束の決意を扱うべきであるとき、あなたのコードは、同期的に実行されています。実際には、clear()と呼ぶ回線も約束を返すので、同様に処理する必要があります。

+0

投稿に修正を追加しましたが、解決しませんでした。 – bwarff

+0

はかなりよく見えます。あなたの 'expect($( 'button.toast-close-button')。isPresent())。toBe(false);'ステートメントは 'item.clickの上記の約束の範囲内でなければなりません() 'を返します。 – LostJon

+0

私はそれについて考えましたが、何も変わっていませんでした。 このようなすべての約束を本当にきれいにすることになっていますか? – bwarff

関連する問題