2016-11-21 111 views
0

我是新的黃瓜框架。我使用黃瓜與java自動登錄場景。以下是我的特性文件 - 以下如何在黃瓜中使用鉤子?

enter image description here

,並一步定義文件 -

enter image description here

我想所有場景(同一實現的方法)和tearDown()之前執行一次setUp()方法方法在所有場景之後。我用黃瓜@Before@After掛鉤(可能不是正確的方式)。

但是我看到了與以前不一樣的結果。它爲所有四種情況逐一打開4個瀏覽器實例,然後執行它們。是否有任何方法僅通過一個瀏覽器實例執行所有這些方案(對於所有方案,請調用setUp()方法一次)?

回答

1
@Before 
public void setup() { 
    if (driver == null) { 
     ...//What you have 
    } 
    driver.manage().deleteAllCookies(); 
} 

要開始請勿在@After掛鉤中關閉瀏覽器。

+0

Cucumber爲每個場景創建一個新的步驟定義和鉤子類實例。因此,驅動程序變量將始終爲空。 – Grasshopper

+0

如果你把它變成靜態的話,就不要這樣了。 – MikeJRamsey56

+0

@Grasshopper我一直這樣做。特徵文件中的最後一個場景具有標籤@quit。 '@After(「'@quit」)public void browser_quit(){driver.quit;} – MikeJRamsey56

0

你需要的是一個在場景之間共享的webdriver,並且在所有場景運行前都不關閉。您可以通過將webdriver實例存儲在一個靜態變量中並向該實例添加一個關閉掛鉤來完成。

看一看這裏面給你這樣的驅動程序類 - SharedWebDriver

如果用DI容器使用它,例如PicoContainer的,你可以在構造函數中注入驅動程序。否則你可以創建一個實例。

你也應該看看ScenarioOutline來壓縮多個登錄場景。