使用Selenium PageObjects自动登录过程

时间:2013-12-18 13:35:57

标签: java design-patterns selenium

我对Selenium非常新,我开始自动登录过程。我为此目的使用了PageObjects。我有LoginPage,其方法如下:

public MyHomePage login(String username,String password)
{
    username.sendKeys(username);
    password.sendKeys(password);

    signInButton.click();
    return PageFactory.initElements(driver,MyHomePage.class);
}

这适用于正确的用户名和密码。但我不想重复相同的代码来处理无效的情况。当然,对于无效的情况,返回的对象将是相同的LoginPage。我希望我能用这种方式编写login方法。

这样的最佳实践方法是什么?由于登录很常见,因此我的案例应该有更好的方法。

或者我是否必须为无效案例编写单独的代码?

4 个答案:

答案 0 :(得分:1)

我会重写登录到另一种方法的部分,这种方法在登录和登录之间可能是不常见的,因为:

private void login(String username,String password){
  username.sendKeys(username);
    password.sendKeys(password);

    signInButton.click();
}

public MyHomePage login(String username,String password)
{
    login(username, password);
    return PageFactory.initElements(driver,MyHomePage.class);
}

public LoginPage loginUnsuccessfully(String username,String password)
{
    login(username, password);
    return this;
}

答案 1 :(得分:1)

甚至变得更加奢侈!您可以制作一个自定义TestRunner,其中字面上会找到您放入的所有@Test方法,然后您的TestRunner会说

  

如果TestA失败:retry

     

如果TestA再次失败:retry

     

如果TestA再次失败:这是合法的失败。

有了这个概念,你显然必须将它与你正在使用的运行软件联系起来。 TestNG,jUnit等

这与我在我工作的公司使用的概念几乎相同。

答案 2 :(得分:1)

将元素分隔为元素类,例如:MyHomePageElements.java。

然后在调用MyHomePage类时初始化它们。

<强> MyHomePage.java

public MyHomePage() {
    PageFactory.initElements(driver, MyHomePageElements.class);
}

public void login(String username, String password) {
    MyHomePageElements.username.sendKeys(username);
    MyHomePageElements.password.sendKeys(password);
    MyHomePageElements.signInButton.click();
}

然后在你的测试类中(或者如果你要使用登录很多,把它作为登录参考而不是作为测试):

@Test
public void adminlogin() {
    MyHomePage homepage = new MyHomePage();
    homepage.login("admin", "p@$$w0rd");
}

然后,如果你需要一个失败的案例:

@Test
public void failedlogin() {
    MyHomePage homepage = new MyHomePage();
    homepage.login("admin", "wrongp@$$w0rd");
    homepage.somemethodcheckingforfailure();
}

<强>解释

我们的想法是,测试类背后的方法应该是不可变的,测试的更改应该谨慎进行,如果元素随着时间的推移通过改进或设计更改而发生变化,那么所有内容都会以一种方式进行组织,以便您轻松更改没有写过方法和测试的东西。我更进一步,将我的用户名,密码,网址等保存在属性文件中,并从那里引用参数。如果我需要多个值,我会根据测试工具(JUnit和TestNG)使用参数注入方法。

答案 3 :(得分:0)

这是一种在C#中使用示例的方法,但我也在java中实现了类似的功能,但是将返回页面作为额外参数发送

http://sellotapetest.blogspot.co.uk/2012/04/navigation-in-page-objects-returning.html?m=1

相关问题