2014-01-15 38 views
1

我對Selenium很新,但有很好的編碼體驗硒結構化模式java

我正在處理非常複雜的Web應用程序的自動化。 對於我的測試,我使用的是junit框架。

我不希望我的課程擴展到龐大的規模,所以這就是我如何劃分我的自動化每頁。例如。我有主頁。從它我可以進入設置,儀表板和許多其他頁面。因此,所有與homePage相關的修改/功能我都保留在主頁類中。然後爲每個下一頁我有另一個類,我創建webdriver並將其分配給前一頁webdriver。所以每個班級都反映了我可以在特定頁面上實現的功能。

所以,假設我有4級頁面,我將有一個第4級的課程,創建它將創建第3級頁面,第3個會創建第2級第一個答案等等,在某些時候,我會進入第一個登錄頁面。基本上我有一個與我的loginPage在它的頭。

它工作得很好,我沒有問題,直到它說到junit。 我喜歡在我的@After類中關閉瀏覽器的想法,並且我擁有不同的頁面類。我如何將它們全部彎曲,無論我在測試中創建和使用的是什麼類 - 頁面,我的After方法正在關閉該瀏覽器?

感謝

+0

'webDriver.quit()'怎麼樣? –

+0

只使用一個Web驅動程序(在特定的JUnit測試用例中創建它),而不是爲每個頁面創建一個Web驅動程序,只需在每個可以傳遞驅動程序的頁面類中創建方法即可。 –

+0

太棒了。謝謝。我沒有在每個班級中創建webdriver,而只是在第一個登錄頁面上,然後我將它傳遞給其他班級。我將更改結構,以便我的第一個主頁將該webdriver作爲參數,然後在測試之前每次創建一個,並且能夠在after方法中退出它。 – Gino

回答

2

要做到這一點,最好的辦法是讓在所有的測試擴展類的After方法。例如:

Class A extends T 
Class B extends T 

Class T { 
    WebDriver driver; 

    @After 
    public void tearDown() { 
     driver.quit(); 
    } 
} 

現在,當你完成A#testMethod1,它將執行從繼承@After方法tearDown()

同樣就你的網頁而言,按照@CeilingGecko的說法,只使用1個webdriver實例。你可以這樣做:

Class A extends T { 
    LoginPage loginPage = new LoginPage(driver); 

    @Test 
    public void testMethod1() { 
     loginPage.login("username", "password"); 
    } 
} 

Class LoginPage { 
    WebDriver driver; 
    public LoginPage(WebDriver driver) { 
     this.driver = driver; 
    } 

    public void login(String user, String password) { 
     // driver.doStuff() 
    } 
} 
+0

快速的問題.. – Gino

+0

我有鏈class3延伸2,2延伸1和1延伸T後有。我正在運行我的測試,它從3-> 2-> 1-> T。它與nullpointexception失敗,我會發現在哪裏:)問題是爲什麼後不執行? – Gino

+0

如果沒有真正看到代碼,我就無法告訴你:(如果你有一個你的東西的框架可能會有所幫助..給http://github.com/ddavison/getting-started-with-selenium試試..它是一個專門用於開始使用硒的框架..可能爲您提供有關如何創建測試的很好的實踐。在自述文件中,它提供了下載鏈接。 – sircapsalot