2016-03-31 10 views
0

現在、gebを使って自動テストを書く方法を学ぶ過程で、これはnoobの観察と質問のビットかもしれません。それは私だけであるか、または複数のテストを次々と実行していくと、テストの実行をスピードアップするように見えますか?たとえば、新しいテストを書くときは、1つまたは2つのメソッドを実行するだけで、他のテストをコメントアウトして、正しく動作することを確認します。すべてがうまく動作し、パスします。次に、すべてのテストを実行するためにすべてのコメントを外すと、テストは非常に高速に実行され、私が自動化しているWebアプリケーションがうまく動作しないため、ロードされていない要素が原因でテストが失敗します。 waitFor{}ブロックを使用している場合でも。私は、特定の場所でsleep(1000)を使用することが助けになっていることがわかりましたが、おそらくこの問題に近づくより良い方法があるように感じます。私が働いているWebアプリケーションは、ユーザが実際に制御できない問題の一部であるかもしれないフィールドを何かするときはいつも、ページをたくさんリフレッシュするようです。私のテストのある部分では、フォームを記入する必要がありますが、入力を書き留めた後にページがリフレッシュされるので、以下のコードを書きましたが、すべてのスリープステートメントのためmehのように見えます。geb自動テストでwaitFor {}とsleep()を使用するベストプラクティスは何ですか?

void populateRequiredFields(){ 
    def fName = "Test" 
    def lName = "User" 
    def email = "[email protected]" 
    def question = "Do you even test bro?" 

    clear.click() 
    //sleep() to slow down test in order to get correct elements due to page refreshing 
    sleep(3000) 
    firstName << fName 
    sleep(1000) 
    lastName << lName 
    sleep(1000) 
    emailAddress << email 
    sleep(1000) 
    veryifyEmail << email 
    sleep(1000) 
    questionField << question 
    sleep(1000) 
} 

答えて

0

sleep()を使用することはお勧めできません。 waitForを使用するようにしてください。

+0

このようにwaitFor {firstName.displayed}を使用して、firstName << fName ??でフィールドを入力します。 – WontonJon

1

典型的には、非同期アクションがpage objectsmodulesのメソッドの内部で実行された後に、ページが期待どおりの状態になるのを待つロジックを囲むことをお勧めします。このようにすれば、すべてのノイズがテストに捨てられることはなく、待ち時間が再利用可能なロジックの一部であるため、テストを追加する際には待つことを忘れることはありません。あなたのケースではそう

輸入geb.Page

class APageThatCanBeCleared extends Page { 

    static content = { 
     clear { $(/*whatever the selector for the clearing element is*/) } 
     firstName { $(/*whatever the selector for the first name element is*/) } 
    } 

    void clear() { 
     clear.click() 
     waitFor { firstName.displayed } 
    } 
} 

、あなたのテストで:

to APageThatCanBeCleared 
clear() 
firstName << "Test" 
0

あなたが提供する標準10秒以上待つ必要がある場合waitFor、これを行うことができます:

waitFor(30, 0.5){ firstName << fName } 

これは30秒間待機し、0.5秒ごとに点検します。

関連する問題