Automated tests 我是否应该使用测试框架中的页面对象模型为您可以在页面上执行的每个操作添加一个方法?

Automated tests 我是否应该使用测试框架中的页面对象模型为您可以在页面上执行的每个操作添加一个方法?,automated-tests,pageobjects,Automated Tests,Pageobjects,我有一个页面对象框架,希望减少每个类中的代码量。每个类都有一个函数,用于接收测试数据并确定如何处理它(在页面上输入数据,单击某些内容等)。对于我将要使用的web元素,我有@FindBy。我的问题是,对于我将在每个web元素上执行的每个操作,我是否也应该有一个方法 例如,我有一个用于输入用户名的web元素,我应该有一个名为enterUsername(String username)的对应方法吗 目前,我觉得这会导致膨胀,没有理由测试不能在WebElements上运行,但我正在寻找一些例子来推动我的

我有一个页面对象框架,希望减少每个类中的代码量。每个类都有一个函数,用于接收测试数据并确定如何处理它(在页面上输入数据,单击某些内容等)。对于我将要使用的web元素,我有@FindBy。我的问题是,对于我将在每个web元素上执行的每个操作,我是否也应该有一个方法

例如,我有一个用于输入用户名的web元素,我应该有一个名为enterUsername(String username)的对应方法吗

目前,我觉得这会导致膨胀,没有理由测试不能在WebElements上运行,但我正在寻找一些例子来推动我的决定

不适用


结果应该是一样的。我感兴趣的是代码的可维护性和干净性。

您应该选择选项1(我会在键入之前添加函数调用,以防万一)

关于“每个操作”,您应该为每个用户场景创建一个方法,用于访问您将要自动化的这个或那个页面的用户

的主要思想是在您的测试逻辑和被测试应用程序的测试逻辑之间提供一个层

因此,您的测试将如下所示:

@Test
public void loginUsingCorrectCredentials() {
    page1.enterCredentials("admin", "secret");
    Assert.assertTrue(page1.isUserLoggedIn(),"Failed to login");
}

@Test
public void loginUsingInCorrectCredentials() {
    page1.enterCredentials("admin", "badpassword");
    Assert.assertFalse(page1.isUserLoggedIn(),"Failed to login");
}
因此,请记住两个主要原则:

  • 您的测试应该完全代表现实生活,并且您在页面上创建的函数应该与您将要介绍的所有场景相匹配
  • 在页面对象中保留与UI相关的内容,在测试代码中保留测试逻辑,以便在测试用例中没有WebElements,在页面对象中没有断言

  • 您应该选择选项1(我会在键入之前添加函数调用,以防万一)

    关于“每个操作”,您应该为每个用户场景创建一个方法,用于访问您将要自动化的这个或那个页面的用户

    的主要思想是在您的测试逻辑和被测试应用程序的测试逻辑之间提供一个层

    因此,您的测试将如下所示:

    @Test
    public void loginUsingCorrectCredentials() {
        page1.enterCredentials("admin", "secret");
        Assert.assertTrue(page1.isUserLoggedIn(),"Failed to login");
    }
    
    @Test
    public void loginUsingInCorrectCredentials() {
        page1.enterCredentials("admin", "badpassword");
        Assert.assertFalse(page1.isUserLoggedIn(),"Failed to login");
    }
    
    因此,请记住两个主要原则:

  • 您的测试应该完全代表现实生活,并且您在页面上创建的函数应该与您将要介绍的所有场景相匹配
  • 在页面对象中保留与UI相关的内容,在测试代码中保留测试逻辑,以便在测试用例中没有WebElements,在页面对象中没有断言
  • @Test
    public void loginUsingCorrectCredentials() {
        page1.enterCredentials("admin", "secret");
        Assert.assertTrue(page1.isUserLoggedIn(),"Failed to login");
    }
    
    @Test
    public void loginUsingInCorrectCredentials() {
        page1.enterCredentials("admin", "badpassword");
        Assert.assertFalse(page1.isUserLoggedIn(),"Failed to login");
    }