简述
PageObject(页面即对象),PO模式是UI自动化测试实现中广泛使用的模式,它基本上由应用程序页面元素和类之间的映射组成;它还使用其元素在该页面上定义了用户操作;po模式和工具(selenium)结合使用时,可以在代码维护方面提供具有高业务价值和低成本的自动化测试。
重构,维护成本低
测试代码是代码,因此重构测试自动化代码与重构应用程序代码一样重要。否则,测试将很难维护,最好扔掉所有东西,然后重新开始。通过遵循一些技巧可以避免这种成本,这些技巧可帮助减少代码量,功能文件和步骤定义的维护成本。
在Web应用程序的UI中,您的测试与某些区域交互。Page Object只是将它们建模为测试代码中的对象。这减少了重复代码的数量,并且意味着如果UI更改,则仅需要在一个地方应用此修复程序。
测试框架发展
1,线形脚本
少量代码实现的针对某一个功能的自动化操作步骤;
特点:上手简单,少量代码,无扩展性,无复用性,基本不具备业务价值
2,数据驱动+关键字驱动(selenium二次封装)
测试脚本与测试数据分离,通过给定的数据执行对应的测试步骤,通过编写用例数据与维护用例数据来实现自动化测试,当页面ui发生变动后只需要修改对应的数据文件,而不需要修改测试脚本代码;
特点:框架开发有一定难度,用例编写变得简单,易于维护,具有很高的业务价值,扩展性底;
3,po模型+数据驱动+关键字驱动
在数据驱动+关键字驱动基础上升级,保留其本身的优点,并有效的提高了扩展性,灵活性,要求有一定的代码功底;
设计分层
设计架构图
设计理念
1,可以将PageObject视为同时面向两个方向;面向测试的开发人员,它们代表特定页面提供的服务。面对开发人员,它们应该是唯一了解页面(或页面一部分)HTML结构的唯一事物。
2,将页面对象上的方法视为提供“服务”是页面最基本的信息。鼓励测试开发人员在PageObject开发中只考虑页面交互的服务,而不是基础的WebDriver的实现。
3, PageObject上的方法应返回其他PageObjects。这意味着我们可以通过我们的应用程序有效地模拟用户的操作流程。也意味着,页面之间的交互流程发生改变(例如,登录页面要求用户在首次登录服务时更改密码,而之前没有这样做),只需更改适当的方法即可。
这种方法的一个后果是,可能有必要对成功和不成功的登录进行建模,或者根据应用程序的状态,单击可能会产生不同的结果。发生这种情况时,通常在PageObject上具有多个方法:
public class LoginPage {
public HomePage loginAs(String username, String password) {
// ... 登录成功
return new HomePage(driver);
}
public LoginPage loginAsExpectingError(String username, String password) {
// ... 登录失败,可能是用户名密码错误
return new LoginPage(driver)