1

我學習的黃瓜通過一些教程和存在的東西,我不知道該怎麼辦。我需要做的是依賴於情景依賴於另一個場景一個場景另一個場景(例如註銷場景我必須在註銷之前先登錄),那麼我應該怎麼做?我應該在註銷場景(在功能文件處)寫入登錄步驟,還是在退出場景中有一種方法可以調用整個登錄場景:如何使黃瓜使用,硒和java

另外我需要知道是否應該在每個場景之前設置驅動程序並在每種情況下退出驅動程序?

+0

如果你正在尋找一個解決方案,而不打開和關閉每個場景的驅動程序看看這個 - https://github.com/cucumber/cucumber-jvm/blob/master/examples/java-webbit-websockets-selenium/的src /測試/ JAVA /黃瓜/示例/ JAVA /的WebSockets/SharedDriver.java – Grasshopper

回答

0

看看到黃瓜掛鉤,這可以讓你「之前」建立全球和「後」的步驟,這將無需在您的特性文件來指定他們爲每個場景中運行。

因爲它們運行的​​每個場景,它們非常適合於像在每個測試的開始初始化驅動程序。它可能適合運行你的登錄,但是如果有機會你會有一個不涉及登錄的場景,那麼它將不會是要走的路(下一步可以選擇)。這同樣適用於After場景,您可以在其中執行註銷並關閉您的驅動程序。舉個例子:

/** 
* Before each scenario, initialise webDriver. 
*/ 
@Before 
public void beforeScenario() { 
    this.application.initialiseWebDriver(); 
} 

/** 
* After each scenario, quit the web driver. 
*/ 
@After 
public void afterScenario() { 
    this.log.trace("afterScenario"); 
     this.application.quitBrowser(); 
    } 

在我的例子,我只是開始在之前方案中的驅動程序,並在之後將其關閉,但理論上這些之前和之後的方法可以包含任何東西,你只需要將它們放在步驟定義類中,並使用「@Before」和「@After」標籤對它們進行註釋,如圖所示。

除了這些,你還可以有多重之前,哪些是你可以標記場景調用標籤後。舉個例子:

/** 
* Something to do after certain scenarios. 
*/ 
@After("@doAfterMethod") 
public void afterMethod() { 
    this.application.afterThing(); 
} 

你可以設置你的步DEFS這樣的事情,並作爲標準,將無法運行。但是,您可以使用'@doAfterMethod'標記自己的場景,並且它會針對標記的場景運行,這對於您在測試結束時需要的常見場景非常有用,但不是全部。這同樣適用於在場景之前運行的方法,只需將'@After'更改爲'@Before'即可。請記住,如果你確實使用了它們,那麼全局的Before和After(在這個例子中,驅動程序初始化和退出)將始終是第一個也是最後一個要運行的事情,其中​​之前和之後的任何其他事件和場景。

延伸閱讀: https://github.com/cucumber/cucumber/wiki/Hooks https://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/

0

您可以設置測試的依賴與qaf bdd。您可以使用dependsOnMethodsdependsOnGroups在場景中的元數據來設置的依賴一樣TestNG的,因爲QAF-BDD是TestNG的BDD實現。

1

有用於創建依賴於黃瓜,JVM另一個場景一個場景的支持。我認爲仍然在Cucumber的Ruby實現中得到支持。然而,這是一種危險的做法。未來版本的Cucumber不支持從另一個場景調用場景的支持。

這就是說,當你想重用功能時,你如何解決你的問題?您提到了註銷,在許多情況下需要爲用戶註銷狀態時,您如何處理? 解決方案是在幫助程序方法或助手類中實現功能,每一步都需要用戶註銷呼叫。

這允許每個場景獨立於所有其他場景。這反過來將允許您以隨機順序運行場景。我不認爲這些情況的執行順序是有保證的。我當然知道,有人討論了讓JUnit跑步者以隨機順序運行場景,只是爲了強化不依賴其他場景的場景。

您的其他問題,如何在場景之前設置WebDriver以及如何拆除它,可以使用Cucumber中的Before和After鉤子來解決。使用它們時,請小心不要導入JUnit版本的Before和After。