La mejor práctica para escribir pruebas de Selenium o cualquier prueba de interfaz de usuario es Page Object Model, que es la idea de que cree un objeto para cada una de las páginas. Cada uno de estos objetos resume la página, por lo que cuando escribes una prueba, realmente no parece que hayas trabajado con Selenium.
Así que para un blog en el que haría algo como esto para crear un objeto de la página principal
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
}
continuación, se crearía una prueba que se parece a los siguientes
[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));
}
}
Gracias, me gusta esta idea. Una pregunta más más: ¿debería cada prueba ser para verificar una acción de IU específica? – Ame
cada prueba debe probar un flujo de trabajo pero recuerde nunca permitir que las pruebas dependan entre sí – AutomatedTester
Esto da como resultado el inicio y la detención del selenio para cada ejecución de prueba. Es esto ideal? Puede ser un proceso bastante lento. ¿Qué hay de instanciar el objeto de selenio fuera de la configuración y volver a la página de inicio en el método de configuración para volver a una página base? Puede conservar algún estado entre pruebas en el navegador, pero esto podría estar bien para un conjunto de pruebas relacionadas – Simon