Мой подход к веб-драйверу - PullRequest
0 голосов
/ 27 апреля 2011

Я начал использовать 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

Что касается поддержки кода, я не вижу никакой выгоды, или я делаю это неправильно? Заранее спасибо!

1 Ответ

0 голосов
/ 28 апреля 2011

Selenium 2 не предложит особых улучшений для удобства сопровождения тестовых сценариев, хотя в пакете поддержки есть некоторые классы, которые теперь доступны, которые вы можете использовать для реализации, например, PageObjects.

Взгляните, например, на класс PageFactory .

Большая разница с селеном 2 заключается в том, как он взаимодействует с браузерами.Selenium 1 обменивается данными с использованием сервера javascript, тогда как веб-драйвер selenium2 обменивается данными непосредственно с браузерами, используя browserapi.Это имеет несколько преимуществ.

  1. Это заставит тесты работать немного быстрее, поскольку им не нужно проходить через сервер javascript
  2. Вы не связаны с (безопасными) ограничениями javascriptбольше.
  3. Вам не нужен (но все еще можно использовать) сервер для выполнения ваших сценариев.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...