1

我想知道如何在同一类以及不同类的多个测试中使用相同的页面对象实例的不同方法。

例如:我正在测试 hs 主页的应用程序,主页具有添加员工、修改员工、员工详细信息和公司详细信息的链接.. 页面

在我的实现中,Page 类 - 包含在页面上执行的常用功能

HomePage 类 - 具有与 HomePage 交互的功能

AddEmployeePage 类 - 具有与 AddEmployeePage 交互的功能

ModifyEmployeePage 类 - 具有与 ModifyEmployeePage 交互的功能

EmployeeDetailsPage 类 - 具有与 EmployeeDetailsPage 交互的功能

CompanyDetailsPage 类 - 具有与 CompanyDetailsPage 交互的功能

以下所有测试类都扩展了 Page 类。

HomePageTest 类 - 包含主页的所有测试

AddEmployeeTest 类 - 包含 Add EmployeePage 的所有测试

ModifyEmployeeTest 类 - 包含 Modify EmployeePage 的所有测试

EmployeeDetailsTest 类 - 包含员工详细信息页面的所有测试

CompanyDetailsTest 类 - 包含公司详细信息页面的所有测试

对于与 HomePage 和其他页面相关的所有测试,我想使用我第一次创建的 HomePage 对象。

为了实现这一点,目前我在 Page 类中将所有页面对象声明为静态,然后在测试中引用相同的对象。

这是正确的做法吗?当我在多个浏览器中运行测试时,它会有什么影响吗?或并行运行测试?请告诉我

提前致谢。

4

2 回答 2

0

使用静态方法很可能很快就会解决任何数量的问题。特别是在将您的共享资源声明为静态时(如 webdriver 本身)。有几次我尝试将我的 webdriver 项目编写为静态的,并且每次我都完成了重写。上次是八月,看我在这里挣扎。

最好考虑将页面对象编写为实例并创建嵌套页面对象。例如,假设您的主页有“去添加员工”按钮,点击 addempolyeepage 后返回。

class HomePage extends LoadableComponent<HomePage>{

    public HomePage(){
        // Construcotr
    }

    @FindBy(id = "buttonAddEmployee")
    private WebElement btnAddEmp;

    @Override
    protected void load() {

    }

    @Override
    protected void isLoaded() throws Error {

    }

    public AddEmployeePage goToAddEmployeePage(){
        btnAddEmp.click();
        return new AddEmployeePage();
}
}

class AddEmployeePage{
    public void addEmployee(){
        // Add 
    }
}

class Test{
     @org.junit.Test
    public void testStuff(){
         new HomePage()
                 .goToAddEmployeePage()
                 .addEmployee();
     }
}
于 2014-01-28T09:34:18.347 回答
0

你的方法似乎不错。最好在单个类中拥有通用的业务登录/功能,例如,在您的情况下,您有 AddEmployeePage,您可以拥有添加员工、编辑和删除等功能。这是一个好方法,因为您不必去每个测试类都会对您的业务登录或页面源更改/添加新字段等进行细微更改。通过更改单个功能(例如添加用户),所有测试类都将更新相同的登录以添加用户。我建议不要扩展类,而是在公共类中使用静态成员函数和变量。这将比处理和更新更容易,并且静态成员可以通过类名在其他测试类的任何地方调用。我们已经在我们的项目中实现了类似的登录,它适用于所有浏览器,如 IE,FF 和铬。就考虑并行测试而言,只需确保您不并行运行两个测试类,这会影响并行运行的其他测试类。

于 2014-01-28T05:22:23.467 回答