首页 > 解决方案 > C# Specflow - 未调用 BeforeScenario 挂钩

问题描述

包:.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");
        }

    }
}

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

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 中的函数。测试绕过钩子成功运行。

标签: c#seleniumbindinghookspecflow

解决方案


您需要在 specflow.json中声明来自外部程序集的绑定。

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

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


推荐阅读