2010-10-10 10 views
5

Estoy creando scripts de prueba de Selenium RC en Visual Studio (C#). Estoy luchando con volver a factorizar las pruebas; todas mis pruebas están en un solo archivo . Agradecería cualquier entrada y/o sugerencias para sitios web, libros, etc. para aprender a modularizar las pruebas.Mejores prácticas para modular los scripts de prueba de Selenium RC

Tengo que ejecutar las mismas pruebas en diferentes sitios (la misma aplicación pero configurada de manera diferente para diferentes clientes e inicios de sesión) que son 95% mismo. ¿Alguien quiere proporcionar algunos buenos ejemplos o mejores prácticas de para hacer esto?

Gracias!

Respuesta

9

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

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

+0

cada prueba debe probar un flujo de trabajo pero recuerde nunca permitir que las pruebas dependan entre sí – AutomatedTester

+1

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

Cuestiones relacionadas