Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Seleinum PageObjects自动化登录过程_Java_Design Patterns_Selenium - Fatal编程技术网

Java 使用Seleinum 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

我对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
。我希望我能用那种方式编写我的
登录
方法

有什么最佳实践方法可以做到这一点吗?因为登录非常常见,所以应该有更好的方法来解决我的问题


还是我必须为无效情况编写单独的代码?

我会将进行登录的部分重构为另一种方法,这种方法在登录和未成功登录之间很常见:

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();
}
说明

我们的想法是,测试类背后的方法应该是不变的,对测试的更改应该谨慎地进行,如果元素随着时间的推移通过改进或设计更改而改变,那么一切都是以一种方式组织的,您可以轻松地进行更改,而无需编写方法和测试。我更进一步保留我的用户名密码,