Я начал использовать webdriver не так давно. Мой подход заключается в следующем:
public class PageObjectRepresentationClass {
protected WebDriver driver;
public PageObjectRepresentationClass(WebDriver driver){
this.driver = driver;
}
public void open(String url){
driver.get(url);
}
public void close(){
driver.quit();
}
public void fillInputFieldByXPath(String xpath, String value){
WebElement inputField = driver.findElement(By.xpath(xpath));
inputField.clear();
inputField.sendKeys(value);
}
public PageObjectRepresentationClass clickButtonByClassXPath(String xpath){
driver.findElement(By.xpath(xpath)).click();
return new PageObjectRepresentationClass(driver);
}
...
// Basically I make here every possible method that deals with my pages
}
Теперь, на моем тесте Junit у меня есть:
public class CreateCompanyGermany {
@Before
public void pagefactory() {
page = PageFactory.initElements(new InternetExplorerDriver(), PageObjectRepresentationClass.class);
page.open(url);
}
@After
public void closeBrowser(){
page.close();
}
@Test
public void internetApplying(){
page.open(url );
page.chooseOptionFromDropDownMenuById("String", "String");
page.fillInputFieldByName("String", "String");
page.fillInputFieldByName("String", "String");
page.chooseOptionFromDropDownMenuById("String", "String");
// So from here on I'm just calling methods defined in PageObjectRepresentationClass
}
Это мой подход к использованию webdriver. Теперь я хотел бы знать, где должна быть выгода по сравнению с Selenium 1? Я имею в виду, что если мой подход верен, то только то, что Selenium1 отличается от selenium2 / webdriver, заключается в том, что в webdriver можно использовать единственные методы для работы со страницами, поэтому вместо записи
selenium.someMethod(); // derives from selenium API
теперь у меня будет
page.myMethod(); // in this particular case derives from PageObjectRepresentationClass
Что касается поддержки кода, я не вижу никакой выгоды, или я делаю это неправильно?
Заранее спасибо!