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));
}
}
Grazie, mi piace questa idea. Ancora una domanda: ogni test dovrebbe essere per verificare una specifica azione dell'interfaccia utente? – Ame
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
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