【问题标题】:C# Specflow - BeforeScenario hook is not being calledC# Specflow - 未调用 BeforeScenario 挂钩
【发布时间】:2021-08-03 00:38:38
【问题描述】:

包: .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# selenium binding hook specflow


    【解决方案1】:

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

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

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

    【讨论】:

    • 帮助很大!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2020-10-03
    相关资源
    最近更新 更多