2015-10-15 90 views
4

我試圖在一個場景中使用多個標籤,但最終會打開每個標籤的窗口,這會在[AfterScenario]步驟中導致問題。對於一個例子,我有一個場景:具有兩個標籤的Specflow場景打開兩個窗口

@Tag01 @Tag02 
Scenario Outline: User Log In 
Given I'm using the <ABC> 
Given I Log in as AutomatedUser 

Examples: 
| ABC  | 
| SiteOne | 
| SiteTwo | 

而且我stepbase.cs文件方案之前:

[BeforeScenario("Tag01", "Tag02")] 
public static void BeforeScenario() 
{ 
    StepBase.CreateBrowser(ConfigurationManager.AppSettings["BrowserType"]); 
    Console.WriteLine("selenium open Called"); 
} 

有一種使用多個標籤,沒有它打開一個窗口,每個標籤的方法嗎?

回答

3

你期望什麼行爲?

,如果你有這樣的:

@Tag01 
Scenario Outline: User Log In 
... etc 

你期望的BeforeScenario被調用?或者只有你有兩個標籤?

通過你的問題的聲音,你希望它調用,如果任何一個標籤存在,但只有一次。

我想你必須自己處理。像這樣的東西應該這樣做:

public class Hooks 
{ 
    private bool BeforeScenarioDoneAlready{get;set;} 
    [BeforeScenario("Tag01", "Tag02")] 
    public void BeforeScenario() 
    { 
     if (!DoneBeforeScenarioAlready) 
     { 
      StepBase.CreateBrowser(ConfigurationManager.AppSettings["BrowserType"]); 
      Console.WriteLine("selenium open Called"); 
      BeforeScenarioDoneAlready=true; 
     } 
    } 
} 

,如果你想讓它只能做,如果有兩個標籤,那麼你可以在你的BeforeScenario方法檢查:

[BeforeScenario()] 
public void BeforeScenario() 
{ 
    if(ScenarioContext.Current.ScenarioInfo.Tags.Contains("Tag01") 
     && ScenarioContext.Current.ScenarioInfo.Tags.Contains("Tag02")) 
    { 
     StepBase.CreateBrowser(ConfigurationManager.AppSettings["BrowserType"]); 
     Console.WriteLine("selenium open Called"); 
    } 
} 
相關問題