2010-07-27 58 views
2

這樣一個JUnit:JUnit中,硒和tearDown

@Test 
    public void testA { 
//some code here... 
} 

    @Test 
    pulic void testB { 
//some code here... 
} 
    @After 
    public void closeBrowsers() throws Exception { 
selenium.stop(); 
} 

這裏是這樣的問題:closeBrowsers()方法的每個測試方法之後調用;在這種情況下,它被稱爲兩次,我得到了「錯誤的測試完成。」來自JUnit。我需要一個junit方法/註釋,它將在所有測試完成後調用(在所有測試完成後調用一次),是否有可能?

另外我試圖檢查硒是否在closeBrowsers()但沒有辦法我找不到 任何解決方案。

P.S:我讀過這一個:How to close a browser on a selenium RC server which lost it's client

,但我無法理解的解決方案,也是目前http://www.santiycr.com.ar/djangosite/blog/posts/2009/aug/25/close-remaining-browsers-from-selenium-rc博客一邊是向下

+0

@AfterClass需要靜態方法。 看看那請: 公共類xxxTest擴展SeleneseTestCase { @Test 公共無效testaaa()拋出異常{ 嘗試{ selenium.setSpeed( 「100」); ..... }} } 如果我使用@AfterClass然後testaaa()需要是靜態的,在這種情況下我不能使用硒變量... 這個任何解決方案? 謝謝。 – Altug 2010-07-28 06:05:06

+0

你可以讓你的selenium變量爲靜態的 – 2010-07-28 10:05:07

回答

3

你可以讓你的硒靜態變量,初始化它在@BeforeClass靜態方法和清理在@AfterClass:

public class ...... { 

    private static Selenium selenium; 

    @BeforeClass 
    public static void initSelenium() { 
    selenium = new DefaultSelenium(...); // or initialize it in any other way 
    } 

    @Test 
    public void testA {...} 

    @Test 
    pulic void testB {...} 

    @AfterClass 
    public static void closeBrowsers() throws Exception { 
    selenium.stop(); 
    } 
} 
+0

儘管如果你的所有測試都包含在一個類中,那麼它就可以工作,如果你在單獨的類文件中有測試(並且不使用套件,從而接受在項目中運行所有測試的默認行爲)。爲此,我們需要一個AfterSuite註釋或一個自定義hack來做類似的事情。 – djangofan 2013-02-09 00:07:58

+0

問題是關於在一個類中使用瀏覽器,如果您需要重複使用相同的瀏覽器進行多個測試,當然您還需要其他東西 - 所有測試的基類,注入瀏覽器實例等 - 有很多選項 – 2013-02-14 11:10:58