2017-12-20 28 views
-3

Java Seleniumでは、なぜこのメソッドでコンストラクタをインスタンス化する必要がありますか?Selenium Javaのメソッドでコンストラクタを実際にインスタンス化する必要はありますか?

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

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

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 } 

「この」インスタンスを返すと、新しいインスタンスを返すについてのクールなことは、あなたのテストクラスでは、あなたが乱雑探して、コードを持たずに、あなたの方法を次々に使うことができることですなぜそれを試してみませんか? –

+0

他のものは何も返しません。戻り値を使用しない場合、違いは*ありませんが、それらはまったく同じではありません。 Btw、あなたはコンストラクタを返さず、コンストラクタをインスタンス化しません。オブジェクトをインスタンス化するには、コンストラクタを使用(呼び出し/呼び出し)します。コンストラクタではなく、オブジェクトインスタンスがメソッドから返されます。 – GolezTrol

+0

私は両方を実行し、両方とも動作します。私はちょうどなぜ多くのチュートリアルオンラインでメソッドのコンストラクタを返すように示唆していますか? – Samranator

答えて

1

あなたは、そのクラスのインスタンスを返す必要はありませんが、多くの場合、それは非常に便利です:

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

は、以下のように上記と同じように有効ではありません。 @Grasshopperがコメントに書いているように、開いている新しいページに対応するクラスのインスタンスを作成すると便利です。

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 
    } 
} 
を: 1)ユーザ名フィールド 2)パスワードフィールド 3)ログインボタン

ユーザー名とパスワードを入力するための方法は次のとおりです。たとえば、次のものが含まログインページを持っています

次に、ログインボタンをクリックすると、ホームページにリダイレクトされる方法があります。

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

これはとても役に立ちました!新しいことを学びました。そのステップ定義コードはあまり冗長ではないようにすることができます。あなたと@Grasshopperに多くのおかげで – Samranator