2016-09-14 4 views
0

ボタンを使用してe2eテストのフィールドを更新したいという問題が発生しました。だから私は.click()が解決するのを待つが、解決すると、値は更新されない。値を取得する前にbrowser.sleep(500)を置くと、期待どおりにうまく更新されます。ここで 分度器の.click()は、関連するDOM要素の角度更新が完了する前に解決します。

は私のコードです:

[...] 
.then((cartItems) => { 
    expect(cartItems).toBe(1) 
    return page.assemblyCheckbox.click() 
}) 
.then(() => { 
    // if I do a browser.sleep(500) here it works well 
    return page.totalPrice 
}) 
.then((totalPrice) => { 
    // start price before click 
    console.log('startPrice: ', startPrice) 

    // should be the price after the update 
    console.log('totalPrice: ', totalPrice) 
}) 
[...] 

値は、角度によって更新される前に、なぜ.click()約束が解決されますか? browser.sleep()を使用しないでこれを回避するにはどうしたらよいですか?

ありがとうございました。今は2日ほどかかった。 :/

+0

clickイベントは、page.totalPriceで更新をトリガーしますか? – Gunderson

+0

正確です。何かを追加しているので、それが機能していることを確認したい。 – Jonathan

答えて

1

コードのロジックは健全なので、ボタンクリックで値がどのように更新されるかは問題です。私が推測しなければならないのは、分度器が待っている角度の「もの」を使わずに、非同期的に行われていることです。

明示的なミリ秒を導入したくない場合は、のようなものに行くことができる待機:

[...] 
.then(() => page.totalPrice) 
.then((beforeUpdate) => 
    page.assemblyCheckbox.click() 
     .then(() => 
      protractor.browser.wait(() => 
       page.totalPrice.then((afterClick) => afterClick !== beforeUpdate)), 
       10000 
      ) 
) 
.then(() => page.totalPrice) 
.then((totalPrice) => { 
    console.log('startPrice: ', startPrice) 
    console.log('totalPrice: ', totalPrice) 
}) 
[...] 

をあなたがよく見えるし、これをリファクタリングすることができるかもしれないが、主なアイデアは、あなたがtotalPrice値を待つということですAssemblyCheckboxをクリックする前の値から変更して、テストを続行します。

+0

動作しません。そしてあなたは '.then(()page.totalPrice)'で解決する約束を返さないのですか? – Jonathan

+0

"()=> page.totalPrice"はpage.totalPriceを返しています(実際にはあなたのコードから推測したものです)。何が間違っていますか? – Vlad

関連する問題