Хороший рабочий пример Selenium2 и webdriver - PullRequest
12 голосов
/ 06 апреля 2011

Я использовал селен 1, но теперь хочу перейти на selenium2 / webdriver.Если честно, мне сложно начать с selenium2 / webdriver.По сути, я не знаю, как работать между объектами страницы.Вот мой пример:

public class LoginPage {
    private final WebDriver driver;

    public LoginPage(WebDriver driver) {
        this.driver = driver; 
    }

    public void loginAs(String username, String password) {
        driver.get("http://url_to_my_webapp");        
        driver.findElement(By.id("username")).sendKeys(username);
        driver.findElement(By.id("pwd")).sendKeys(password);
        driver.findElement(By.className("button")).submit();                  
    }

    public static void main(String[] args){
        LoginPage login = new LoginPage(new FirefoxDriver());
        login.loginAs("user", "pass");
    }
}

Теперь, когда пользователь вошел в систему, происходит перенаправление на другую страницу.Насколько я понимаю, теперь я должен создать новый объект страницы, который представляет текущую страницу ... Дело в том, что я не знаю как?Где я могу найти несколько хороших рабочих примеров, выходящих за рамки уровня "привет, мир"?Как мне продолжить этот пример?

Заранее спасибо!

Ответы [ 2 ]

9 голосов
/ 07 апреля 2011

На этих сайтах приведены несколько примеров:

http://luizfar.wordpress.com/2010/09/29/page-objects/

http://www.wakaleo.com/blog/selenium-2-web-driver-the-land-where-page-objects-are-king

На этой странице приведены некоторые сведения об использовании PageFactory для поддержки объектов страницы: http://code.google.com/p/selenium/wiki/PageFactory

Вы можете расширить свой пример для работы с объектами страницы, создав класс для каждой страницы, например:

public class MainPage 
{ 
  private final WebDriver driver;  

  public MainPage(WebDriver driver) 
  {     
    this.driver = driver;  
  }   

  public void doSomething() 
  {      
    driver.findElement(By.id("something")).Click;     
  }
} 

и изменив loginAs, чтобы получить класс, представляющий страницу, по которой перемещается браузер.после входа в систему:

public MainPage loginAs(String username, String password) 
{       
    driver.get("http://url_to_my_webapp");             
    driver.findElement(By.id("username")).sendKeys(username);     
    driver.findElement(By.id("pwd")).sendKeys(password);     
    driver.findElement(By.className("button")).submit();
    // Add some error checking here for login failure
    return new MainPage(driver);                   
}
5 голосов
/ 31 января 2013

Этот вопрос довольно старый, но я подумал, что все же стоит поделиться им.

В общем, сначала я создам необходимые классы объектов страницы.Затем я создаю отдельный класс для тестовой логики, в который вы помещаете свой «рабочий процесс пользователя» с кликами и другими взаимодействиями страниц.Из приведенного примера кода я предполагаю, что этот класс заменит main ().Это также класс, в который я включаю такие вещи, как testNG / junit, аннотации тестов и dataProviders (не обязательно, но если вы используете эти вещи, это может быть полезно отметить) В этом классе вы можете создавать экземпляры классов для страниц.вы будете взаимодействовать с , поскольку они вам нужны, поскольку созданный вами объект webdriver управляет браузером, а не классами страниц.

Выполнение таких действий позволяет вносить простые изменения в тестовые рабочие процессы, а также вобъекты страницы в случае, если фактические страницы изменены, или у вас просто есть новые требования к тестированию.

Мой любимый побочный эффект этого метода заключается в том, что класс с рабочим процессом может быть очень читабельным «сценарием» теста со всеми уродливыми деталями в реальных тестах, скрытыми под вызовами, такими как loginPage.Login ()и loginPage.LoginSucceeded (), чтобы при случайном проходе не отображались сведения о поиске учетных данных пользователя, обработке 404/400, поиске и нажатии кнопки входа и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...