如何重用商业功能的selenium页面对象

时间:2013-07-21 16:28:06

标签: selenium pageobjects

我们使用selenium页面对象模式为每个页面构建模型。但是,为了实现一个业务功能,它将涉及几页。例如,创建一个用户,它涉及AgreementPage和CreateUserPage,如下所示

agreementPage = AgreementPage()
creatUserPage = agreementPae.accept()
createUserPage.typeEmail("your email address")
createUserPage.submit()

在我们的测试中,许多测试用例需要为前提条件创建一个用户。为了重用这些代码,我们制作了一个新的服务层。我们将代码移动到UserService.CreateUser()中。然后我们的测试脚本变为

def test_create_user():
    userService.CreateUser("email address")

    #do assertion

def test_edit_user():
    authenticationService.login("user name", "password")
    userService.CreateUser("email addrss")

    #do editing created user

def test_delete_user():
    authenticationService.login("user name", "password")
    userService.CreateUser("email addrss")

    #do deleting created user

由于大多数功能涉及两个或更多页面,因此页面对象进入服务层。在测试脚本层中,似乎我们正在测试服务。但我们认为服务名称不友好而不是与域语言交谈。

我认为这是进行自动化测试的常用方法,对吧?如何命名服务层或如何处理重新生成页面对象?

1 个答案:

答案 0 :(得分:0)

我们也使用页面对象模型作为框架工作,它很棒。重新生成页面的一种方法是在页面中创建一个方法,每次返回装饰页面。在调用/使用页面中的任何其他对象之前调用方法。这应该可以解决问题。让我举几个登录页面的例子。

 public class LoginPage{
 public LoginPage getLoginPage(){
 PageObject.initElements(yourDriverObject, LoginPage.class);
}


public void doLogin(){
 //Code to login 

}

Test class

public class testLogin{

 new LoginPage.getLoginPage().doLogin();

}