2017-09-21 1 views
0

GebとSpockを一緒に使用してフロントエンドアプリケーションをテストしています。私はこれらのツールの両方に新しいです。私はGebReportingSpecを拡張するSpock仕様を持っています。クラス全体を実行しているときにSpock非初期のフィーチャメソッドが失敗する

次に、アプリケーションにログインして特定のページに移動するsetupSpecがあります。これに続いて、ウェブページ上でアクションを実行するさまざまなフィーチャメソッド(ドロップダウンをクリックしてからオプションを選択するなど)が続きます。

すべてのフィーチャメソッドは、それらが単独で実行されると正常に通過します。第1のフィーチャメソッドは、単にドロップダウンから値を選択し、結果として適切なフィールドが表示されることをアサートする(選択されたオプションは、ページに表示されるフィールドを制御する)。 2番目のフィーチャーメソッドは、ドロップダウンリストから別のオプションを選択できないため、フィールドを見つけることができないため、そのメソッドのアサートが失敗します。新しいフィールドを更新するイベントによって選択されたオプションは、トリガーされません。私のスペックは以下の通りです:

class VerifyFields extends GebReportingSpec { 
     def setupSpec() { 
      // Log in 
      via Dashboard 
      loginForm.login("marco", "abc123") 

      // Navigate to Page 1 
      button1.click() 
      button2.click() 

      // Click Button 3 
      button3.click() 
    } 

// This feature method passes successfully 
    def "Verify Member fields exist"() { 
     when: "User selects Member option for drop down 1" 
     at Page1 
     projSubject.click() 
     projCoverMbrFields.projSubjectMbrOption.click() 
     sleep(1500) 

     then: "All expected member fields are displayed in the left panel" 
     assert mbrName.present 
    } 

// This feature method fails when run after the first feature method 
    def "Verify Provider fields exist"() { 
     when: "User selects Provider option for subject type" 
     at Page1 
     projSubject.click() 
     projCoverProvFields.projSubjectProvOption.click() 
     sleep(1500) 

     then: "All expected provider fields are displayed in the left panel" 
     assert provName.present 
    } 

私は以下の行のような要素に集中するページを取得するには、物事を追加しようとしている:

driver.findElement(By.className("projSubject")).click() 
driver.findElement(By.cssSelector(".projSubjectoption[value='Provider']")).click() 

そして=で「選択」を選択したのは属性を変更します以下の行:私は

$("select.projSubject option[value='Provider']").jquery.attr("selected", true) 
projCoverProvFields.projSubjectProvOption.jquery.attr('selected', 'selected') 

が、何も第2の特徴メソッドが正常にページ上のフィールドを更新するための選択ドロップダウンをトリガするために失敗した問題を解決することができます。

答えて

1

setupSpec()は、(メソッドごとに1回ではなく)スペックごとに1回実行されるため、エラーが発生している可能性があります。仕様内のすべてのメソッドのセッションを維持し、それらを順番に実行するには、クラスの最上位に@Stepwise spock属性を追加する必要があります。

@Stepwise 
class VerifyFields extends GebReportingSpec { 
    ... 
} 

別のオプション、ここでは、()ではなくsetupSpecより)(セットアップを使用することです違いは次のとおりです。setupSpecを(使用することにより

def setup() {}   // run before every feature method 
def setupSpec() {}  // run before the first feature method 

)、それが第一の特徴の方法の前に実行されます、これは両方のテストが個別に動作する理由です。 setupSpec()をsetup()に置き換えてみてください。

setup()を実行すると、すべてのメソッドを繰り返し実行するため、テスト実行の合計時間が長くなることに注意してください。可能であれば、私は@Stepwiseを使用します。

+0

@Stepwise spock属性をクラスの先頭に追加すると、問題が解決しました。本当にありがとう、私はこれを解決しようと時間を費やしました! –

+0

いいえ問題ありません - うれしかった:) – Rushby

関連する問題