2010-10-10 7 views
5

Я создаю скрипты для тестирования Selenium RC в Visual Studio (C#). Я борется с повторным факторингом тестов; все мои тесты находятся в одном файле . Я был бы признателен за любые материалы и/или указатели на веб-сайты, книги, и т. Д., Чтобы узнать о модуляции тестов.Лучшие практики для модульных сценариев тестирования Selenium RC

Мне нужно выполнить те же тесты на разных сайтах (одно и то же приложение, но настроено по-разному для разных клиентов и логинов), которые равны 95% . Кто-нибудь хотел бы привести несколько хороших примеров или лучше всего использовать ?

Спасибо!

ответ

9

Лучшая практика для написания тестов Selenium или любых тестов UI - это Page Object Model, что является идеей создания объекта для каждой из страниц. Каждый из этих объектов абстрагирует страницу, поэтому, когда вы пишете тест, он действительно не выглядит так, как будто вы работаете с Selenium.

Так что для блога вы могли бы сделать что-то вроде этого, чтобы создать объект для домашней страницы

public class Home 
{ 
    private readonly ISelenium _selenium; 

    /// <summary> 
    /// Instantiates a new Home Page object. Pass in the Selenium object created in the test SetUp(). 
    /// When the object in instantiated it will navigate to the root 
    /// </summary> 
    /// <param name="selenium">Selenium Object created in the tests 
    public Home(ISelenium selenium) 
    { 
     this._selenium = selenium; 
     if (!selenium.GetTitle().Contains("home")) 
     { 
      selenium.Open("/"); 
     } 
    } 

    /// <summary> 
    /// Navigates to Selenium Tutorials Page. Selenium object wll be passed through 
    /// </summary> 
    /// <returns>SeleniumTutorials representing the selenium_training.htm</returns> 
    public SeleniumTutorials ClickSelenium() 
    { 
     _selenium.Click("link=selenium"); 
     _selenium.WaitForPageToLoad("30000"); 
     return new SeleniumTutorials(_selenium); 
    } 

    /// <summary> 
    /// Click on the blog or blog year and then wait for the page to load 
    /// </summary> 
    /// <param name="year">blog or blog year 
    /// <returns>Object representing /blog.* pages</returns> 
    public Blog ClickBlogYear(string year) 
    { 
     _selenium.Click("link=" + year); 
     _selenium.WaitForPageToLoad("30000"); 
     return new Blog(_selenium); 
    } 
    // Add more methods as you need them 
} 

, то вы можете создать тест, который выглядит следующим

[TestFixture] 
public class SiteTests 
{ 
    private ISelenium selenium; 
    [SetUp] 
    public void Setup() 
    { 
     selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://www.theautomatedtester.co.uk"); 
     selenium.Start(); 
    } 

    [TearDown] 
    public void Teardown() 
    { 
     selenium.Stop(); 
    } 

    [Test] 
    public void ShouldLoadHomeThenGoToXpathTutorial() 
    { 
     Home home = new Home(selenium); 
     SeleniumTutorials seleniumTutorials = home.ClickSelenium(); 
     SeleniumXPathTutorial seleniumXPathTutorial = seleniumTutorials.ClickXpathTutorial(); 
     Assert.True(seleniumXPathTutorial. 
        IsInputOnScreen(SeleniumXPathTutorial.FirstInput)); 
     Assert.True(seleniumXPathTutorial 
        .IsInputOnScreen(SeleniumXPathTutorial.SecondInput)); 
     Assert.True(seleniumXPathTutorial 
        .IsInputOnScreen(SeleniumXPathTutorial.Total)); 
    } 
} 
+0

Спасибо, мне нравится эта идея. Еще один вопрос: должен ли каждый тест проверять одно конкретное действие пользовательского интерфейса? – Ame

+0

каждый тест должен протестировать один рабочий процесс, но не забывайте, чтобы тесты не полагались друг на друга. – AutomatedTester

+1

Это приводит к запуску и остановке селена для каждого тестового прогона. Это идеальный? Это может быть довольно медленный процесс. Как создать экземпляр объекта селена вне программы установки и просто вернуться на главную страницу метода установки, чтобы вернуться на базовую страницу? Вы можете сохранить некоторое состояние между тестами в браузере, но это может быть нормально для набора связанных тестов – Simon

Смежные вопросы