2014-04-02 14 views
7

Czy istnieje sposób na przeprowadzenie wielu testów w tej samej przeglądarce przy użyciu Webdriver (Selenium) przy użyciu Xunit, obecnie Xunit uruchamia nową przeglądarkę dla każdego nowego testu poniżej jest przykładowy kodXunit utwórz nową instancję klasy Test dla każdego nowego testu (przy użyciu WebDriver i C#)

public class Class1 

{ 
    private FirefoxDriver driver; 
    public Class1() 
    { 
     driver = new FirefoxDriver(); 
    } 

    [Fact] 
    public void Test() 
    { 
     driver.Navigate().GoToUrl("http://google.com"); 
     driver.FindElementById("gbqfq").SendKeys("Testing"); 
    } 

    [Fact] 
    public void Test2() 
    { 
     driver.Navigate().GoToUrl("http://google.com"); 
     driver.FindElementById("gbqfq").SendKeys("Testing again"); 
    } 

} 

Odpowiedz

5

Chociaż nie wiem, selen, wiem, że xUnit.net tworzy nową instancję klasy testu dla każdej metody badawczej, tak że prawdopodobnie wyjaśnia, dlaczego widząc obserwowane zachowanie: pole driver jest ponownie inicjowane dla każdej metody testowania, ponieważ konstruktor jest wywoływany za każdym razem.

W celu ponownego użycia pojedynczej FirefoxDriver przykład, można użyć xUnit.net za IUseFixture<T> interfejs:

public class Class1 : IUseFixture<FirefoxDriver> 
{ 
    private FirefoxDriver driver; 

    public void SetFixture(FirefoxDriver data) 
    { 
     driver = data; 
    } 

    [Fact] 
    public void Test() 
    { 
     driver.Navigate().GoToUrl("http://google.com"); 
     driver.FindElementById("gbqfq").SendKeys("Testing"); 
    } 

    [Fact] 
    public void Test2() 
    { 
     driver.Navigate().GoToUrl("http://google.com"); 
     driver.FindElementById("gbqfq").SendKeys("Testing again"); 
    }  
} 
+0

Jedyne co mogę zasugerować, to musi być 'IUseFixture ', aby umożliwić używanie innych sterowników (Chrome, Firefox, IE itp.). Wszystkie sterowniki w Selenium implementują 'IWebDriver'. – Arran

+0

Interfejs 'IUseFixture ' ma ogólne ograniczenie 'T: new()', więc niestety nie będzie to możliwe. –

+0

V neat +1 (jutro, gdy zdobędę więcej głosów: D) Nigdy nie uważałem, że klasa "third party" (i/lub "Tuple" zestaw argów) może być używana w inwokacji 'IUseFixture' . –

0

po pewnym dochodzenia w stanie znaleźć rozwiązanie tutaj jest, a także zaktualizowane FirefoxDriver do IWebDriver ::

public class SampleFixture : IDisposable 
    { 
    private IWebDriver driver; 
    public SampleFixture() 
    { 
     driver = new FirefoxDriver(); 
     Console.WriteLine("SampleFixture constructor called"); 

    } 

    public IWebDriver InitiateDriver() 
    { 
     return driver; 
    } 

    public void Dispose() 
    { 
     // driver.Close(); 
     driver.Quit(); 
     Console.WriteLine("Disposing Fixture"); 
    } 
} 

public class Class1 : IUseFixture<SampleFixture> 
{ 
    private IWebDriver driver; 

    public void SetFixture(SampleFixture data) 
    { 
     driver = data.InitiateDriver(); 
    } 

    [Fact] 
    public void Test() 
    { 
     driver.Navigate().GoToUrl("http://google.com"); 
     driver.FindElement(By.Id("gbqfq")).SendKeys("Testing"); 
    } 

    [Fact] 
    public void Test2() 
    { 
     driver.Navigate().GoToUrl("http://google.com"); 
     driver.FindElement(By.Id("gbqfq")).SendKeys("Testing again"); 
    } 
} 
Powiązane problemy