代码之家  ›  专栏  ›  技术社区  ›  Samranator

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

  •  -3
  • Samranator  · 技术社区  · 8 年前

    在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");
    }
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   StopTheRain    8 年前

    您不必返回该类的实例,但在许多情况下,它非常有用。 正如@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();