将多个对象注入对象容器

问题描述 投票:0回答:1

我正在尝试将ExtentReports引入我的测试套件,并且在上下文注入方面遇到一些问题,我试图将报告类与IWebDriver一起注入到我的对象容器中,但是我收到了错误消息。 “ ScenarioContext.Current静态访问器不能在多线程执行中使用。这让我烦恼了,谁能知道我在哪里出问题了?

这里是钩子类的片段

   class Hooks : ReportingStepDefinitions
{

    private readonly IObjectContainer _objectContainer;
    private TestReports _report; 
    private IWebDriver _driver;



    public Hooks (IObjectContainer objectContainer)
    {
        _objectContainer = objectContainer;      
    }   

    [BeforeScenario]
    public void initialise()
    {  
        _report = new TestReports();
        _report.startTest();
        _driver = new ChromeDriver(@"C:\\TestData\Dependencies")
        _objectContainer.RegisterInstanceAs<IWebDriver>(_driver);
        _objectContainer.RegisterInstanceAs<TestReports>(_report);
}

我还没有包含close语句,因为我很确定这是问题所在。所有帮助我们都感激不尽]

编辑以包括堆栈跟踪

Result StackTrace:  
Server stack trace: 
   at SpecResults.ReportingAspect.ReportingMessageSink.<>c__DisplayClass1.<SyncProcessMessage>b__0()

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at OCCSpecFlow.Hooks.initialise()
   at lambda_method(Closure , IContextManager )
   at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.FireEvents(HookType bindingEvent)
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnScenarioStart(ScenarioInfo scenarioInfo)
   at TechTalk.SpecFlow.TestRunner.OnScenarioStart(ScenarioInfo scenarioInfo)
   at SpecFlowAutomation.FeatureFiles.HomepageFeature.ScenarioSetup(ScenarioInfo scenarioInfo)
   at SpecFlowAutomation.FeatureFiles.HomepageFeature.ViewingTheHomepageJumps() in C:\Source\dev\AutomationFramework\SpecFlowAutomation\FeatureFiles\HomePage.feature:line 10
--TearDown

Server stack trace: 
   at SpecResults.ReportingAspect.ReportingMessageSink.<>c__DisplayClass1.<SyncProcessMessage>b__0()

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at OCCSpecFlow.Hooks.cleanup()
   at lambda_method(Closure , IContextManager )
   at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.FireEvents(HookType bindingEvent)
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnScenarioEnd()
   at TechTalk.SpecFlow.TestRunner.OnScenarioEnd()
   at SpecFlowAutomation.FeatureFiles.HomepageFeature.ScenarioTearDown()
Result Message: 
TechTalk.SpecFlow.SpecFlowException : The ScenarioContext.Current static accessor cannot be used in multi-threaded execution. Try injecting the scenario context to the binding class. See http://go.specflow.org/doc-multithreaded for details.
TearDown : System.NullReferenceException : Object reference not set to an instance of an object.
c# selenium reporting specflow extent
1个回答
0
投票

[当我尝试在自己的ScenarioContext容器上使用specflow时,响应是由于Specflow有点打ic。由于将对象容器移出并返回到场景上下文,所有这些都开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.