Подтвердить что ты не робот

Хороший рабочий пример Selenium2 и webdriver

Я использую селен 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");
    }
}

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

Спасибо заранее!

4b9b3361

Ответ 1

Эти сайты дают несколько примеров:

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;     
  }
} 

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

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);                   
}

Ответ 2

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

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

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

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