Лучшая практика для написания тестов 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));
}
}
Спасибо, мне нравится эта идея. Еще один вопрос: должен ли каждый тест проверять одно конкретное действие пользовательского интерфейса? – Ame
каждый тест должен протестировать один рабочий процесс, но не забывайте, чтобы тесты не полагались друг на друга. – AutomatedTester
Это приводит к запуску и остановке селена для каждого тестового прогона. Это идеальный? Это может быть довольно медленный процесс. Как создать экземпляр объекта селена вне программы установки и просто вернуться на главную страницу метода установки, чтобы вернуться на базовую страницу? Вы можете сохранить некоторое состояние между тестами в браузере, но это может быть нормально для набора связанных тестов – Simon