2016-05-30 8 views
0

私は現在、ページオブジェクト設計モデルを使用してUIテストを行っています。現在、各ページにコンテンツを格納するためにハッシュマップを使用しています。Javaでセレンを使用してUIテストを実行するときPageObjectのコンテンツを格納する方法は?

マップを使用している理由は、多くのフィールドを埋めるたびにfillData(マップデータ)メソッドを使用してキーに一致させるためです。

Map<String, WebElement> content = new HashMap(); 

    content.put("backgroundColor", WebElement a); 
    content.put("fontColor", WebElement b); 
    content.put("linksColor", WebElement c); 
    content.put("actionBarActiveColor", WebElement d); 
    content.put("activeColor", WebElement e); 

public void fillDataFields(Map<String, String> data){ 

     data.forEach((k,v) -> { 
      content.get(k).setValue(v); 
     }); 
    } 

を、私のページのテストはしています::

例えば、私のページオブジェクトが持っているでしょう

generalAppearanceFieldsData = new HashMap(); 

     generalAppearanceFieldsData.put("backgroundColor", BLUE_HEX); 
     generalAppearanceFieldsData.put("fontColor", ORANGE_HEX); 
     generalAppearanceFieldsData.put("linksColor", PURPLE_HEX); 
     generalAppearanceFieldsData.put("actionBarColor", RED_HEX); 
     generalAppearanceFieldsData.put("actionBarActiveColor", ORANGE_HEX); 
     generalAppearanceFieldsData.put("activeColor", GREEN_HEX); 

をそして、私のテストでは、私が持っている問題

brandingPage.fillDataFields(generalAppearanceFieldsData); 

を呼ぶだろうこれは、文字列のキーを維持したり、検証するのが難しいということです。なぜなら、どこにも指していないキーを呼び出すことができるからです。地図がページコンテンツを保存する正しい方法であるかどうかはわかりません。 Javaでこれを行うより良い方法はありますか?

答えて

2

PageObjectsは、テストコードをページの内部の動作から隔離するために使用する必要があります。アクションや設定者に対応するページオブジェクトにメソッドを追加し、テストからそれらを呼び出すことを検討することをお勧めします。

PageObjectは、ページ上の操作方法を知っています。 TestクラスはPageObjectと対話し、ページに対処するよう要求してから、期待どおりに動作したことを主張します。例えば

public class Test { 
    private final String BLUE_HEX="0000FF"; 
    private final String RED_HEX="FF0000"; 
    private WebDriver driver; 

    @Test 
    public void test() { 
     PageObject page = new PageObject(driver); 
     page.setBackgroundColor(BLUE_HEX); 
     page.setActionBarColor(RED_HEX); 
     // do stuff 
     assertTrue(page.getSomeValue()); 
    } 
} 

public class PageObject { 
    private WebDriver driver; 

    public PageObject(WebDriver driver) { 
     this.driver = driver; 
    } 
    private void setText(String id, String val) { 
     driver.findElement(By.id(id)).sendKeys(val); 
    } 
    public void setBackgroundColor(String hex) { 
     setText("backgroundColor", hex); 
    } 
    public void setActionBarColor(String hex) { 
     setText("actionBarColor", hex); 
    } 
    public boolean getSomeValue() { 
     // Do some checks on the values etc 
     return true; 
    } 
} 
関連する問題