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

问题描述 投票:-3回答:1

在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");
}
}
java selenium pageobjects
1个回答
1
投票

您不必返回该类的实例,但在许多情况下它非常有用。正如@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();
© www.soinside.com 2019 - 2024. All rights reserved.