ページオブジェクトのフレームワークを作っているうちに、その概念を調べていると、ページファクトリ(@FindBy)がページオブジェクトと組み合わせて使用されていることを知りました。ただし、Page Object クラスのロケーターで driver.findElement を使用できるのに、@FindBy を使用する必要がある理由を理解できません。例えば :
// @FindBy を使用したコード
public class LoginPage{
public LoginPage(WebDriver driver)){
PageFactory.initElements(driver,this);
}
public WebElement q;
}
public class TestCase{
WebDriver driver=new FirefoxDriver();
LoginPage logPage=new LoginPage(driver);
public void enterUserName(){
logPage.q.sendKeys("username");
}
}
// driver.findElement を使用したコード
public class LoginPage{
public WebElement q=driver.findElement(By.id('q'));
}
public class TestCase{
WebDriver driver=new FirefoxDriver();
LoginPage logPage=new LoginPage();
public void enterUsername(){
logPage.q.sendKeys("username");
}
}
両方のコードが本質的に同じことをしているので、ここにある両方のコードの違いは何ですか?