2016-05-30 49 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; 
    } 
} 
相关问题