Лучшие практики для модульных сценариев тестирования Selenium RC - PullRequest
5 голосов
/ 10 октября 2010

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

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

Спасибо!

1 Ответ

9 голосов
/ 10 октября 2010

Наилучшим методом написания тестов Selenium или любых тестов пользовательского интерфейса является Модель объекта страницы , которая представляет собой идею создания объекта для каждой из страниц.Каждый из этих объектов абстрагирует страницу, поэтому, когда вы пишете тест, он действительно не выглядит так, как будто вы работали с 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));
    }
}
...