2010-10-10 13 views
5

Sto creando script di test RC Selenium in Visual Studio (C#). Sono alle prese con il ri-factoring dei test; tutti i miei test sono in un singolo file . Gradirei qualsiasi input e/o indicazioni su siti Web, libri, ecc. Per conoscere la modularizzazione dei test.Best practice per la modularizzazione degli script di test Selenium RC

Devo eseguire gli stessi test su siti diversi (stessa applicazione ma configurati in modo diverso per diversi client e accessi) che sono al 95% stesso. Qualcuno vorrebbe fornire alcuni buoni esempi o le migliori pratiche per fare questo?

Grazie!

risposta

9

Le migliori pratiche per scrivere test di selenio o qualsiasi test dell'interfaccia utente sono Page Object Model che è l'idea che si crea un oggetto per ciascuna delle pagine. Ognuno di questi oggetti astratta la pagina in modo che quando si scrive un test non sembra davvero che tu abbia lavorato con Selenium.

Così, per un blog che avrebbe fatto qualcosa di simile per creare un oggetto per la home page

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 
} 

allora si sarebbe creare un test che assomiglia seguenti

[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

Grazie, mi piace questa idea. Ancora una domanda: ogni test dovrebbe essere per verificare una specifica azione dell'interfaccia utente? – Ame

+0

ogni test dovrebbe testare un flusso di lavoro, ma ricordarsi di non consentire mai che i test si facciano affidamento l'uno sull'altro – AutomatedTester

+1

Ciò comporta l'avvio e il blocco del selenio per ogni esecuzione di test. Questo è l'ideale? Può essere un processo piuttosto lento. Che dire dell'istanziazione dell'oggetto selenio al di fuori del programma di installazione e tornare alla pagina iniziale nel metodo di installazione per tornare a una pagina di base? È possibile mantenere uno stato tra i test nel browser, ma ciò potrebbe essere corretto per una serie di test correlati – Simon

Problemi correlati