2016-05-30 36 views
0

我目前正在使用頁面對象設計模型進行UI測試。目前,我在每個頁面中都使用散列圖來存儲內容。如何在使用Java中的selenium進行UI測試時存儲PageObject內容?

我使用地圖的原因是,只要我有很多字段要填充,我就可以使用fillData(Map data)方法來匹配鍵。

例如,我的網頁對象有:

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; 
    } 
} 
相關問題