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 文件的名称。
包: .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 文件的名称。