2017-08-09 46 views
0

我浏览过互联网以获取相关信息,但没有运气。下面的示例代码给出:在Page Factory设计模式中返回对象的用例是什么?

public class HomePage 
{ 
    @FindBy(id = "fname") 
    WebElement name; 

    @FindBy(id = "email") 
    WebElement email; 

    @FindBy(id = "password") 
    WebElement password; 

    @FindBy(id = "passwordConf") 
    WebElement confPassword; 

    public HomePage fillFormDetails(String firstname, String emailid) 
    { 
     name.sendKeys(firstname); 
     email.sendKeys(emailid); 

     return this; 
    } 

    public void fillPass(String pass) 
    { 
     password.sendKeys(pass); 

    } 
} 

我想知道同时呼吁fillFormDetails(String firstname, String emailid)方法,为什么我们正在返回的对象?

什么可能是用例,所以我们可以用它来管理我们的代码效率?

回答

1

当你想给我们链接

HomePage homePage = new HomePage(); 
homePage 
    .fillFormDetails(firstName, email) 
    .fillPass(pass); 

作为一个侧面说明方法返回的对象时,更好的设计是将所有的动作分解到分离的方法,而不是只是其中的一部分

public HomePage fillFirstName(String firstName) 
{ 
    name.sendKeys(firstName); 

    return this; 
} 

public HomePage fillEmail(String email) 
{ 
    email.sendKeys(email); 

    return this; 
} 

public void fillPass(String pass) 
{ 
    password.sendKeys(pass); 
} 

而且在测试

HomePage homePage = new HomePage(); 
homePage 
    .fillFirstName(firstName) 
    .fillEmail(email) 
    .fillPass(pass); 
+0

感谢您的回答 – NarendraR

1

这就是所谓的方法链接。 更多在这里。 https://en.wikipedia.org/wiki/Method_chaining#Java

假设您在一个类中有三种方法来填充用户名,填充密码并最终提交表单。

通常情况下,您将创建页面的对象,并将使用该对象分别调用它们。这样的事情,

MethodChaining methodChaining = new MethodChaining(); 
methodChaining.fillUserName("username"); 
methodChaining.fillPassword("password"); 
methodChaining.submit(); 

但是如果你回到同一类的对象this你可以链下列方式方法。

有时很方便,而且看起来不错:)

public class MethodChaining { 

    public MethodChaining fillUserName(String username){ 
     return this; 
    } 

    public MethodChaining fillPassword(String password){ 
     return this; 
    } 

    public MethodChaining submit(){ 
     return this; 
    } 

    public static void main(String args[]){ 
     MethodChaining methodChaining = new MethodChaining(); 
     methodChaining.fillUserName("abc") 
       .fillPassword("pass") 
       .submit(); 
    } 
} 

现在天气使用,在自动化与否,完全是对人与应用的行为。

如果您有严格的单一流程,多个流程真的很难处理。这可能很好。

适用于多个流程。假设您提交此表单时,您要么登录,要么保持在显示错误的页面上。现在要做到这一点,你将不得不在Submit功能与一些逻辑处理。这有时会变得复杂,并且在您必须维护时会产生问题。

+0

感谢您的帮助 – NarendraR

相关问题