C# 我想在单个SpecFlow功能文件中一个接一个地执行多个场景(基于selenium),但它';它不工作并且显示错误

C# 我想在单个SpecFlow功能文件中一个接一个地执行多个场景(基于selenium),但它';它不工作并且显示错误,c#,visual-studio,selenium,specflow,C#,Visual Studio,Selenium,Specflow,我是SpecFlow的新手,正在使用POC,这样我就可以在我的项目中使用VisualStudio+SpecFlow+Selenium组合。我创建了一个功能文件并添加了两个场景。第一个用于登录,第二个用于页面创建。因此,我将使用一个用户登录,并在同一会话中创建一个页面。我使用SpecFlow从功能文件生成了步骤定义文件。以下是我的功能文件内容: Feature: Login and create page configuration page This feature will test

我是SpecFlow的新手,正在使用POC,这样我就可以在我的项目中使用VisualStudio+SpecFlow+Selenium组合。我创建了一个功能文件并添加了两个场景。第一个用于登录,第二个用于页面创建。因此,我将使用一个用户登录,并在同一会话中创建一个页面。我使用SpecFlow从功能文件生成了步骤定义文件。以下是我的功能文件内容:

Feature: Login and create page configuration page
    This feature will test the login and the page configuration page creation functionality:

@Login
Scenario Outline: Login into Minerva Cloud
    Given User open up the "<URL>"
    When User login using "<UserName>" and "<Password>"
    Then User successfully logged into the Minerva Cloud
    And User selects the "<ClientName>"

Examples: 
|URL|UserName|Password|ClientName|
|https://####|####|####|## Global Services|


@PageConfigurationPageCreation
Scenario Outline: New Page Configuration page creation
    Given User click on the new button
    When User enters details like "<Name>" "<Type>" "<CRMtype>" "<URL>" "<Description>" "<AccessGroup>" in the creation page
    And click on the Save button
    Then the new page is created

Examples: 
|Name|Type|CRMtype|URL|Description|AccessGroup|
|PageConfiguration_Sunil1|CRM|Vertex|URL|Description for my Page|Access Group to be selected|
功能:登录并创建页面配置页面
此功能将测试登录和页面配置页面创建功能:
@登录
场景概述:登录Minerva云
给定用户打开“”的
当用户使用“”和“”登录时
然后用户成功登录到Minerva云
并且用户选择“”
示例:
|URL |用户名|密码|客户端名称|
|https://|
@页面配置页面创建
场景大纲:新建页面配置页面创建
给定用户单击“新建”按钮
当用户输入类似“”的详细信息时

因此,每当我运行功能文件时,它都会毫无问题地执行登录场景,但当它到达第二个
给定的
语句(在所附图像中用红色标记)时就会失败,该语句属于第二个场景并抛出错误。错误为:

System.NullReferenceException:对象引用未设置为对象的实例。

看起来它以某种方式丢失了我在第一个场景中初始化的Webdriver的当前实例


请帮助!

您在给定的第1个
方法中初始化驱动程序。这意味着在该场景运行后它将死亡。我不使用SpecFlow,但从快速看,您需要使用
[场景前]
来初始化驱动程序和
[场景后]
要关闭它

如果您想要一个功能中所有场景的单一驱动程序实例,请在[Beforefeature]中初始化驱动程序,并使用[Afterfeature]进行处理,如下所示

namespcae Yourproject
[Binding]
public class BeforeAndAfterFeature
{
[BeforeFeature]
    public static void InitializeDriver()
    {
        //Place your driver initialize code here
    }
[AfterFeature]
    public static void QuitDriver()
    {
        //Dispose driver object
    }
}
  • 或者,如果您想为每个场景打开和退出浏览器,请使用[BeforeCasenario]和[AfterScenario]标记

  • 谢谢你的回复,伙计,但是如果我在第一个场景之后关闭驱动程序,那么我将处于与现在相同的情况。我的意思是,这并不能解决一个接一个地执行这两个场景的目的,因为我想先执行登录场景,然后再执行创建场景。我想这样做是因为我想要实现“一次登录并验证多个”场景。我希望它能提供某种澄清。想法是在任何场景执行之前使用
    [BeforeCasenario]
    一次和
    [AfterScenario]
    在最后一个场景执行后一次。因此,您将初始化它一次,并且在所有场景运行结束之前不会关闭它。我可能出错,但据我所知,这些挂钩在场景开始时会自动执行。如果有办法控制它们,请让我知道。我想尝试一下。我们还有[BeforeFeature]和[AfterFeature],所以我想使用它们,但看起来像[BeforeFeature]和[AfterFeature]对我来说不起作用。不确定原因。也尝试了上下文注入,但第二个
    给定的
    启动后,它仍会再次调用webdriver。请不要发布代码图像。在您的问题中包含编码为纯文本的代码。这是否回答了您的问题?当然,以后会处理它。不,我还没有找到任何问题的答案还没有。