2014-04-02 18 views
7

每一個新的測試創建測試新的類實例有什麼辦法來運行使用的xUnit使用的webdriver(硒)同一個瀏覽器多次測試,目前的xUnit推出新的瀏覽器爲每一個新的測試下面是示例代碼的xUnit(選用的webdriver和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"); 
    } 

} 

回答

5

雖然我不知道硒,我知道xUnit.net爲每個測試方法創建測試類的新實例,這樣或許可以解釋爲什麼你所看到的行爲您報告:在driver字段被初始化爲重新每個測試方法,因爲構造函數被調用每次。

爲了重用單個FirefoxDriver例如,你可以使用xUnit.net的IUseFixture<T>接口:

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

我建議的唯一的事情就是需要'IUseFixture ',這樣就可以使用其他驅動程序(Chrome,Firefox,IE等)。 Selenium中的所有驅動程序均實現'IWebDriver'。 – Arran

+0

的'IUseFixture '接口具有通用約束'T:新的()',所以這是很遺憾不會是可能的。 –

+0

V整齊+1(明天,當我得到更多的選票:d)沒有以往任何時候都認爲這是一個第三方類(和/或'Tuple'd組參數的個數)可以在一個'IUseFixture'「invocaction」直接使用。 –

0

經過一番考察能夠在這裏找到解決它,也更新FirefoxDriver到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"); 
    } 
}