我们真的需要在SeleniumJava方法中实例化构造函数吗?

我们真的需要在SeleniumJava方法中实例化构造函数吗?,java,selenium,pageobjects,Java,Selenium,Pageobjects,在Java Selenium中,为什么需要在方法中实例化构造函数 public class Navigation extends BasePage { public Navigation(WebDriver driver) { super(driver); } public Navigation visitUsSite() { driver.navigate().to("https://www.randomwebsite.com")); return new Navig

在Java Selenium中,为什么需要在方法中实例化构造函数

public class Navigation extends BasePage {
public Navigation(WebDriver driver) {
    super(driver);
}

public Navigation visitUsSite() {
    driver.navigate().to("https://www.randomwebsite.com"));
    return new Navigation(driver);
}
}
上面的说法不也和下面的一样有效吗

public class Navigation extends BasePage {
public Navigation(WebDriver driver) {
    super(driver);
}

public void visitUsSite() {
    driver.navigate().to("https://www.randomwebsite.com");
}
}

您不必返回该类的实例,但在许多情况下,它非常有用。 正如@Grasshopper在评论中所写的那样,创建一个与您正在打开的新页面相对应的类实例非常有用。例如,您有一个包含以下内容的登录页面: 1) 用户名字段 2) 密码字段 3) 登录按钮

输入用户名和密码的方法如下:

public class LoginPage extends BasePage {

    public LoginPage (WebDriver driver) {
        super(driver);
    }

    public LoginPage enterUsername(String username) {
        WebElement usernameField = driver.findElementBy...;
        usernameField.sendKeys(username);
        return this; // returns this instance because it stays on the LoginPage
    }

    public LoginPage enterPassword (String password) {
        WebElement passwordField = driver.findElementBy...;
        passwordField.sendKeys(password);
        return this; // returns this instance because it stays on the LoginPage
    }
}
然后你有一个方法,点击登录按钮,它会将你重定向到主页

public HomePage clickLoginButton () {
        WebElement loginButton = driver.findElementBy...;
        loginButton.click();
        return new HomePage(driver); // returns a new instance on the HomePage because homepage will be opened
    }
返回“this”实例并返回一个新实例最酷的一点是,在测试类中,您可以一个接一个地使用方法,而不会有凌乱的代码:

LoginPage loginPage = new LoginPage(driver);
loginPage.enterUsername("username")
      .enterPassword("password");
HomePage homepage = loginPage.clickLoginButton();

为什么不试试呢?一个返回
导航
另一个什么也不返回。如果不使用返回值,对您来说可能没有区别,但它们肯定不一样。顺便说一句,您不会返回构造函数,也不会实例化构造函数。使用(调用/调用)构造函数来实例化对象。不是构造函数,而是从方法返回的对象实例。我已经执行了这两个,它们都可以工作。我只是好奇为什么这么多在线教程建议在方法中返回构造函数?@Samranator这是一个基于pageobjects概念的良好编码实践。当您通过单击按钮或链接离开当前页面时,您希望将新页面的pageobject返回给调用方法。在您的情况下,您返回的是同一页,因此看起来有点过头了。这非常有帮助!学到了一些新的东西,很高兴能够让步骤定义代码看起来不那么冗长。非常感谢你和“蚱蜢”