BeforeScenario 和 AfterScenario 挂钩在 Specflow 中不起作用

dst*_*101 0 selenium specflow

我的 SeleniumSteps.cs 代码中有以下代码我试图让 AfterScenario 在调试这些测试时触发

using PrivateDomain;
using Machine.Specifications;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using TechTalk.SpecFlow;

namespace Functional.Steps
{
    public class SeleniumSteps : PrivateDomain.Steps.SeleniumSteps
    {
        #region Hooks
        [BeforeScenario]
        public void Before()
        {
            // before 
        }

        [AfterTestRun, Scope(Tag = null)]
        public new static void AfterTestRun()
        {
            // after testrun
        }

        [AfterScenario]
        public void AfterScenarioErrorScreenshot()
        {
            // after scenario
        }

        #endregion
    }
}





using OpenQA.Selenium;
using TechTalk.SpecFlow;

namespace PrivateDomain.Steps
{
    [Binding]
    [Scope(Tag = "Selenium")]
    public class SeleniumSteps
    {
        protected static IWebDriver webDriver;

        public SeleniumSteps();

        public virtual IWebDriver WebDriver { get; }

        [AfterTestRun]
        [Scope(Tag = null)]
        public static void AfterTestRun();

        [AfterScenarioAttribute(new[] { })]
        public virtual void AfterScenario();

    }
}
Run Code Online (Sandbox Code Playgroud)

我的功能文件如下所示:(详细信息已删除)

@Customer_Portal
Feature: Account Management - Registration
    In order to create an account
    As a customer
    I want to register my details with the application

Scenario: Register

    # Registration Form
    When I navigate to "/Customer/Account/Register"
    // more code...


Scenario: Required Fields

    // more code...

Scenario: Invalid Contact Details

    // more code...

Scenario: Insufficient Password Strength

    // more code...

Scenario: Password Mismatch

    // more code...

Scenario: Already Registered

    // more code...

Scenario: Invalid Activation

    // more code...

Scenario: Already Activated

   // more code...
Run Code Online (Sandbox Code Playgroud)

当我调试测试时,我可以看到调试器点击 AfterTestRun 部分。然而,BeforeScenario或 都没有AfterScenario被行使。

有人可以告诉我我做错了什么吗?

Ste*_*fan 5

首先,正如 Sandesh 在他的回答中指出的那样,您缺少子类[Binding]的属性SeleniumSteps。仅仅在基类中拥有它是不够的[Binding],您必须将其应用到您的钩子方法或步骤定义(绑定)所在的每个类,因为这就是specflow在幕后搜索钩子和绑定的方式。它就像范围标识符。如果您错过将[Binding]属性放置到类中,specflow 将不会搜索该类中潜在的钩子方法或绑定。文档链接: https: //specflow.org/documentation/Hooks/

这个链接也很有用。检查 RunOfTheShipe 给出的答案:Specflow 测试步骤继承导致“不明确的步骤定义”