带有两个标签的Specflow场景打开两个窗口

本文关键字:两个 窗口 标签 Specflow | 更新日期: 2023-09-27 18:18:04

我试图在一个场景中使用多个标签,但它最终为每个标签打开一个窗口,这会在[AfterScenario]步骤期间导致问题。举个例子,我有一个场景:

@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");
}

是否有一种方法可以使用多个标签,而不需要为每个标签打开一个窗口?

带有两个标签的Specflow场景打开两个窗口

你期望什么行为?

如果你有这个:

@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");
    }
}