Selenium Page对象:为什么要返回此值?

Jam*_*mes 1 selenium pageobjects page-factory

通过阅读SeleniumHQ的pageobject文档,他们指定了从不导航到其他页面的方法返回“ this”的示例。我的问题是为什么?

我以为页面对象的状态可能是一个原因,但是页面本身(实际的UI页面)可能会更改状态或刷新,但页面对象本身不会。Page Factory及其@FindBy批注已经确保了每次调用WebElement时都会找到它,因此在这种情况下元素的状态似乎无关紧要。

Tar*_*ani 5

考虑他们的例子

public LoginPage typeUsername(String username) {
    driver.findElement(usernameLocator).sendKeys(username);
    return this;    
}

public LoginPage typePassword(String password) {
    driver.findElement(passwordLocator).sendKeys(password);
    return this;    
}

public HomePage submitLogin() {
    driver.findElement(loginButtonLocator).submit();
    return new HomePage(driver);    
}
Run Code Online (Sandbox Code Playgroud)

现在假设我们已经创建了页面对象create as page。如果您未返回任何内容,则您的代码会想要

page.typeUsername("tarun");
page.typePassword("lalwani");
HomePage newPage = page.submitLogin()
Run Code Online (Sandbox Code Playgroud)

但是,当您返回此值时,它允许您进行方法链接。所以我可以像下面这样使用

HomePage newPage = page.typeUsername("tarun").typePassword("lalwani").submitLogin()
Run Code Online (Sandbox Code Playgroud)

如您所见,IDE intellisense可以节省一些编码工作,并且更加优雅