return 页面工厂设计模式中的对象的用例是什么?

What could be the use case to return a object in Page Factory design pattern?

我已经通过互联网浏览以获取相关信息,但没有成功。示例代码如下:

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) 方法时返回对象?

我们可以使用哪些用例来管理我们的代码效率?

当你想使用方法链接时使用返回的对象

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);

这称为方法链接。 更多在这里。 https://en.wikipedia.org/wiki/Method_chaining#Java

假设您将三种方法合而为一class 来填写用户名、填写密码并最终提交表单。

通常您会创建页面的对象并使用该对象分别调用它们。像这样,

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

然而,如果您 return 相同 class 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 函数中使用一些逻辑来处理它。这有时会变得复杂,并在您必须维护它时产生问题。