C# Specflow - 未调用 BeforeScenario 挂钩

C# Specflow - BeforeScenario hook is not being called

包: .net 核心 3.1, Specflow 3.8.7

解决方案结构:

我在项目中有步骤定义 UMW.Selenium.UI (A)

namespace UMW.Selenium.UI.Steps
{
    [Binding]
    public class CalculatorStepDefinitions : UIFramework
    {
        UIBrowser uiBrowser;

        public CalculatorStepDefinitions()
        {
            uiBrowser = new UIBrowser();
        }

        [Given(@"the first number is (.*)")]
        public void GivenTheFirstNumberIs(int p0)
        {
            uiBrowser.NavigateToURL("https://demoqa.com/browser-windows");
        }

    }
}

我在另一个项目中有 Hooks(BeforeTestRun、BeforeScenario 等)Selenium.UI.Framework (B)。

namespace Selenium.UI.Framework.Framework.Utilities.ScenarioFactory
{
    using LogBuffer = List<string>;

    [Binding]
    [TestClass]
    public class SetupAndTearDown
    {
        internal readonly ScenarioContext _scenarioContext;
        internal readonly FeatureContext _featureContext;
        private readonly IObjectContainer _objectContainer;
        public SetupAndTearDown()
        {

        }

        public SetupAndTearDown(IObjectContainer objectContainer, FeatureContext featureContext, ScenarioContext scenarioContext)
        {
            this._objectContainer = objectContainer;
            _featureContext = featureContext;
            _scenarioContext = scenarioContext;
        }

        [BeforeTestRun]
        public static void InitializeTestSuite()
        {
            ReportsFactory.Report.StartTestSuite();
        }

        [BeforeScenario]
        public void InitializeTestScenario()
        {
            ReportsFactory.Report.StartTestCase();
            //_objectContainer.RegisterInstanceAs(Webdriver.Driver);
        }
    }
}

当我从 A 执行场景时,它不会从 B 调用 BeforeTestRun/BeforeScenario。这里项目 A 使用项目 B 的函数。测试成功绕过挂钩。

您需要在 specflow.json 中声明 bindings from an external assembly

{
  "stepAssemblies": [
    {
      "assembly": "Selenium.UI.Framework"
    }
  ]
}

注意:需要程序集的名称,而不是名称空间,没有文件扩展名。您需要仔细检查 Selenium.UI.Framework 项目创建的 DLL 文件的名称。