2017-03-09 78 views
1

我目前正在使用C#,nunit和Selenium構建一個自動化項目,我試圖設置一個安裝類,它將在運行任何TestFixture之前初始化硒webdriver,他們已經結束,並試圖從TestFixture在每個TestFixtureOneTimeSetUp屬性中獲得該webdriver,可以這樣做,或者我應該改變selenium類爲靜態,以便能夠獲得每個TestFixture安裝程序中的驅動程序字段?將參數傳遞給TestFixture OneTimeSetUp從SetUpFixture

這樣的基本結構是這樣的:

[SetUpFixture] 
public class Test 
{ 
    [OneTimeSetUp] 
    public void Init() 
    { 
     _driver = new Driver(); 
    } 
} 

[TestFixture] 
public class FirstTest 
{ 
    [OneTimeSetUp] 
    public void Init() 
    { 
     xxxxxxxxxx - here I need to initialize a class with the driver from the setup class 
    } 
} 
+0

是否要爲每個測試初始化​​和關閉驅動程序,或者僅針對所有測試進行一次? – Guy

+0

對於所有測試來說,setupfixture應該在所有測試之前運行setup一次,然後在所有測試完成後關閉驅動程序一次,然後拆卸它。 –

+0

爲什麼不創建一個類並在構造函數中初始化驅動程序並繼承這個類到你想要的類? – Sham

回答

1

就目前的立場,唯一的辦法NUnit的可以爲你做這個,如果你使用一個靜態的。但是,如果您要並行測試多個驅動程序,這種方法將無法正常工作。

一個真正的解決方案(需要一個新的NUnit功能)將允許設置固定裝置將信息保存在TestContext中,然後您可以訪問個人夾具。

解決方法是在夾具onetimesetup中創建一個新的驅動程序,但前提是它尚未創建。這也需要一個靜態的,但你可以設置它,以便每個你支持的驅動程序都有一個單獨的靜態。

+0

感謝您的回覆,我已經實施了使用靜態的解決方法。作爲目前的情況,你的意思是我無法平行運行多個驅動程序? –

0

我對Java和TestNG有類似的要求,但總的想法結構可能會有所幫助。

我所做的是從安裝驅動程序類型類擴展每個測試類。因此,安裝驅動程序類將選擇瀏覽器和選項,導航到該站點(或您需要執行的操作的第一頁),然後測試類接管。不過,我可以通過使用@beforesuite和@aftersuite關鍵字將它保留在比測試「更高級別」的位置,從而保持相同的實例。

0

它可能可以通過重新使用遠程網絡驅動程序來完成。您將必須獲取會話的會話標識並將類擴展爲重用遠程Web驅動程序。然後,您可以使用網址和會話ID與每個班級的現有會話進行連接。