c# - 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 中的函数。测试绕过钩子成功运行。
解决方案
您需要在 specflow.json中声明来自外部程序集的绑定。
{
"stepAssemblies": [
{
"assembly": "Selenium.UI.Framework"
}
]
}
注意:程序集的名称,而不是命名空间,是必需的,没有文件扩展名。您需要仔细检查 Selenium.UI.Framework 项目创建的 DLL 文件的名称。