我对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
方法。
这样的最佳实践方法是什么?由于登录很常见,因此我的案例应该有更好的方法。
或者我是否必须为无效案例编写单独的代码?
答案 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