您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何实现可返回不同PageObjects的WebDriver PageObject方法

如何实现可返回不同PageObjects的WebDriver PageObject方法

Bohemian的答案并不灵活- 您不能执行返回到同一页面页面操作(例如输入错误的密码),也不能拥有多个页面操作导致不同的页面(如果您想弄乱了,登录页面还有另一项操作,导致结果不同)。最后,您还会堆满更多PageObjects,以迎合不同的结果。

经过更多尝试(包括失败的登录方案)后,我决定执行以下操作:

private <T> T login(String user, String pw, Class<T> expectedPage){
    username.sendKeys(user);
    password.sendKeys(pw);
    submitButton.click();
    return PageFactory.initElements(driver, expectedPage);
}

public AdminWelcome loginAsAdmin(String user, String pw){
    return login(user, pw, AdminWelcome.class);
}

public CustomerWelcome loginAsCustomer(String user, String pw){
    return login(user, pw, CustomerWelcome.class);
}

public Login loginWithBadCredentials(String user, String pw){
    return login(user, pw, Login.class);
}

这意味着您可以重用登录逻辑,但是可以防止测试类通过预期的页面,这意味着该测试类具有很高的可读性:

Login login = PageFactory.initElements(driver, Login.class);
login = login.loginWithBadCredentials("bad", "credentials");
// TODO assert login failure message
CustomerWelcome customerWelcome = login.loginAsCustomer("joe", "smith");
// TODO do customer things

在每种情况下都有单独的方法也可以使LoginPageObject的API非常清晰- 而且很容易分辨出所有登录结果。使用接口限制使用该login()方法页面时,我没有看到任何价值。

我同意汤姆·安德森(Tom Anderson)的观点,应将可重用的WebDriver代码重构为细粒度的方法。是否对它们进行细粒度的暴露(以便测试类可以选择相关的操作),或者将它们作为单个粗粒度的方法组合并暴露给测试类,可能是个人喜好问题。

其他 2022/1/1 18:18:39 有456人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶