Java 使用Seleinum PageObjects自动化登录过程
我对Selenium非常陌生,我开始自动化登录过程。为此,我使用了PageObjects。我有一个Java 使用Seleinum PageObjects自动化登录过程,java,design-patterns,selenium,Java,Design Patterns,Selenium,我对Selenium非常陌生,我开始自动化登录过程。为此,我使用了PageObjects。我有一个LoginPage,它的方法如下: public MyHomePage login(String username,String password) { username.sendKeys(username); password.sendKeys(password); signInButton.click(); return PageFactory.initElem
LoginPage
,它的方法如下:
public MyHomePage login(String username,String password)
{
username.sendKeys(username);
password.sendKeys(password);
signInButton.click();
return PageFactory.initElements(driver,MyHomePage.class);
}
这在正确的用户名和密码下运行良好。但我不想重复处理无效案例的相同代码。当然,对于无效的情况,返回的对象将是相同的LoginPage
。我希望我能用那种方式编写我的登录
方法
有什么最佳实践方法可以做到这一点吗?因为登录非常常见,所以应该有更好的方法来解决我的问题
还是我必须为无效情况编写单独的代码?我会将进行登录的部分重构为另一种方法,这种方法在登录和未成功登录之间很常见:
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;
}
我会将进行登录的部分重构为另一种方法,这种方法在登录和未成功登录之间很常见:
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;
}
我会将进行登录的部分重构为另一种方法,这种方法在登录和未成功登录之间很常见:
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;
}
我会将进行登录的部分重构为另一种方法,这种方法在登录和未成功登录之间很常见:
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;
}
甚至变得更加奢侈!您可以创建一个自定义的
TestRunner
,它可以查找您放入的所有@Test
方法,然后您的TestRunner
会说
如果TestA
失败:重试
如果测试再次失败:重试
如果TestA
再次失败:这是合法的失败
有了这个概念,您显然必须将它与您正在使用的任何正在运行的软件相结合。TestNG、jUnit等
这与我工作的公司使用的概念几乎相同。甚至变得更加奢侈!您可以创建一个自定义的
TestRunner
,它可以查找您放入的所有@Test
方法,然后您的TestRunner
会说
如果TestA
失败:重试
如果测试再次失败:重试
如果TestA
再次失败:这是合法的失败
有了这个概念,您显然必须将它与您正在使用的任何正在运行的软件相结合。TestNG、jUnit等
这与我工作的公司使用的概念几乎相同。甚至变得更加奢侈!您可以创建一个自定义的
TestRunner
,它可以查找您放入的所有@Test
方法,然后您的TestRunner
会说
如果TestA
失败:重试
如果测试再次失败:重试
如果TestA
再次失败:这是合法的失败
有了这个概念,您显然必须将它与您正在使用的任何正在运行的软件相结合。TestNG、jUnit等
这与我工作的公司使用的概念几乎相同。甚至变得更加奢侈!您可以创建一个自定义的
TestRunner
,它可以查找您放入的所有@Test
方法,然后您的TestRunner
会说
如果TestA
失败:重试
如果测试再次失败:重试
如果TestA
再次失败:这是合法的失败
有了这个概念,您显然必须将它与您正在使用的任何正在运行的软件相结合。TestNG、jUnit等
这与我工作的公司在这里使用的概念几乎相同。这里是一种使用C#示例的方法,但我在java中也实现了类似的功能,只是将返回页作为额外参数发送
这里是一种使用C语言示例的方法,但我在java中也实现了类似的功能,只是将返回页作为额外参数发送
这里是一种使用C语言示例的方法,但我在java中也实现了类似的功能,只是将返回页作为额外参数发送
这里是一种使用C语言示例的方法,但我在java中也实现了类似的功能,只是将返回页作为额外参数发送
将元素分离到一个元素类,例如: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();
}
然后在您的测试类中(或者如果您打算经常使用login,请将其作为登录引用而不是测试):
然后,如果您需要失败的案例:
@Test
public void failedlogin() {
MyHomePage homepage = new MyHomePage();
homepage.login("admin", "wrongp@$$w0rd");
homepage.somemethodcheckingforfailure();
}
说明:
我们的想法是,测试类背后的方法应该是不变的,对测试的更改应该谨慎地进行,如果元素随着时间的推移通过改进或设计更改而改变,那么一切都是以一种方式组织的,您可以轻松地进行更改,而无需编写方法和测试。我更进一步,将我的用户名、密码、URL等保存在属性文件中,并从中引用参数。如果需要多个值,我会根据测试工具(JUnit和TestNG)使用参数注入方法。将元素分离到一个元素类,例如: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();
}
然后在您的测试类中(或者如果您打算经常使用login,请将其作为登录引用而不是测试):
然后,如果您需要失败的案例:
@Test
public void failedlogin() {
MyHomePage homepage = new MyHomePage();
homepage.login("admin", "wrongp@$$w0rd");
homepage.somemethodcheckingforfailure();
}
说明:
我们的想法是,测试类背后的方法应该是不变的,对测试的更改应该谨慎地进行,如果元素随着时间的推移通过改进或设计更改而改变,那么一切都是以一种方式组织的,您可以轻松地进行更改,而无需编写方法和测试。我更进一步保留我的用户名密码,