2017-07-19 6 views
0

私はすでにPageObjectパターンの要点を得ていると思いますが、私が得なかった部分はいくつかあります。PageObjectパターンを使用してテストを改善するにはどうすればよいですか?

だから私はこのチュートリアルを以下ましたし、今私は、このページのクラスを持っている:

public class SignUpPage extends AbstractPage { 

    AndroidDriver<MobileElement> driver; 

    public SignUpPage(AndroidDriver<MobileElement> driver) { 
     super(driver); 
    } 

    public void signUpAllFieldsEmpty() { 
     signup_button.click(); 
    } 

    public void signUpOnlyFirstName() { 
     first_name_edittext.sendKeys("First name"); 
     hideKeyboard(); 
     signup_button.click(); 
    } 


    @AndroidFindBy(id="signup_button") 
    private MobileElement signup_button; 

    @AndroidFindBy(id="first_name_edittext") 
    private MobileElement first_name_edittext; 

    @AndroidFindBy(id="last_name_edittext") 
    private MobileElement last_name_edittext; 

    @AndroidFindBy(id="signup_email_edittext") 
    private MobileElement signup_email_edittext; 

    @AndroidFindBy(id="signup_password_edittext") 
    private MobileElement signup_password_edittext; 

    @AndroidFindBy(id="confirm_password_edittext") 
    private MobileElement confirm_password_edittext; 

} 

そこで私は、このテストクラスがあります。

public class Test_001_SignUp extends AbstractTest { 

    public Test_001_SignUp() {} 

    @Test 
    public void signUp_allFieldsEmpty() { 

     app.landingPage().goToSignUpPage();   
     app.signUpPage().signUpAllFieldsEmpty(); 

    } 

    @Test 
    public void signUp_onlyFirstName() { 

     app.signUpPage().signUpOnlyFirstName(); 

    } 

} 

私はないですテストクラスのメソッドが冗長になっているように見えるので、正しく実行しているかどうか確かめてくださいテストに関連する別の@Testメソッドを作成した場合はntを返します。

どうすれば改善できますか?あるいは、私はこのテストで何か問題があるのですか?

答えて

1

あなたのPageクラスは愚かでなければなりません。単にページを制御するだけです。

public void signup() { 
    signup_button.click(); 
} 

public void enterFirstName(String firstName) { 
    first_name_edittext.sendKeys(firstName); 
} 

public String getFirstName() { 
    etc... 

Testクラスには、それぞれのテストで呼び出すメソッドのロジックがあります。

他のいくつかのポイント:

  • あなたは、あなたのテストで何を主張されていません。 getSuccessMessageメソッドまたはgetPageTitleをページに追加する必要があります(または、登録が完了したらページ上で何が起きても問題ありません)。次に、あなたのテストは、テキストが存在し、正しいことを主張することができます。
  • 一部のフレームワークでは、テストとページの間にStepDefクラスも使用されています。すべてのテストの場合
+0

が、テキストフィールドの代わりに、タイトルを主張することをお勧めし連鎖することができますか?私はネイティブのAndroidアプリをテストしているので – lmpgdn

0

あなたは@After注釈付き@Before注釈、きれいな方法で設定する方法でそれを行うことができ、同じ開始点を持っています。彼らは前に、すべてのテストメソッドの後に実行され、サイドノートとして、その出発点

public class Test_001_SignUp extends AbstractTest { 

    public Test_001_SignUp() {} 

    @Before 
    public void setUp() { 
     app 
      .landingPage() 
      .goToSignUpPage(); 
    } 

    @Test 
    public void signUp_allFieldsEmpty() { 
     app 
      .signUpPage() 
      .signUpAllFieldsEmpty(); 
    } 

    @Test 
    public void signUp_onlyFirstName() { 
     app 
      .signUpPage() 
      .signUpOnlyFirstName(); 
    } 

    @After 
    public void cleanUp() { 
     // roll back to initial state 
    } 
} 

にテストをもたらすために必要なアクションを実行しますが、一例としてsignUp_allFieldsEmpty()テストを取ることができます。 goToSignUpPage()SignUpPageインスタンスを返す必要がありますので、あなたは、次のステップ

@Test 
public void signUp_allFieldsEmpty() { 
    app 
     .landingPage() 
     .goToSignUpPage()   
     .signUpAllFieldsEmpty(); 
} 
関連する問題