Let's see a simple example to see the difference,PS: code just for Demo, not for formal testing:-):
CommonPage.class(PageObject)
public class CommonPage {
private WebDriver driver;
@FindBy(how = How.NAME, using = "q")
private WebElement searchtext;
@FindBy(how = How.NAME, using = "btnG")
private WebElement searchbutton;
public CommonPage(WebDriver driver) {
this.driver = driver;
System.out.println("cool stuff!");
}
public CommonPage getpages(){
driver.get("http://www.google.com/");
searchtext.sendKeys("hello, common");
return this;
}
public void searchaction(){
searchbutton.click();
}
}
Version1, using PageFactory.initElements(WebDriver, Class):
Testcode:
public class PageFactoryTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WebDriver driver = new FirefoxDriver();
CommonPage searchpage = PageFactory.initElements(driver, CommonPage.class);
searchpage.getpages().searchaction();
driver.quit();
}
}
Version2, just using New:
Testcode:
public class PageFactoryTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WebDriver driver = new FirefoxDriver();
CommonPage searchpage = new CommonPage(driver);
searchpage.getpages().searchaction();
driver.quit();
}
}
So both PageFactory.initElements(driver, CommonPage.class); and new CommonPage(driver); are calling the construct method in order to pass the Driver to Commonpage class.
The difference between these 2 versions is to initialize looking up the WebElement (Fields) you declared in Commonpage.
so if you define your WebElements using @FindBy annotation instead of defining it within your each method directly(eg. driver.findElement(By)), then you need to using PageFactory.initElements() for help.
No comments:
Post a Comment