【问题标题】:Injecting Multiple Objects into the object container将多个对象注入对象容器
【发布时间】:2017-02-06 12:51:49
【问题描述】:

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

这是 hooks 类的 sn-p

   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);
}

我没有包括关闭语句,因为我很确定这就是问题所在......感谢所有帮助

编辑以包含堆栈跟踪

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.

【问题讨论】:

  • 问题出在哪里?它看起来不像提供的代码中的任何地方......
  • 我还通过调用构造函数中的元素(如 Class test { private readonly IWebDriver _driver; )获得了实现这一点的测试。私有只读TestReports _report;公共测试(IWebDriver 驱动程序,TestReports 报告){ _driver = driver; _report = 报告; }
  • 当实际并行运行测试时,问题似乎出现了,所以它按顺序工作没问题
  • 好的,但是上面哪一行代码导致了异常?
  • 我没有得到一个特定的行,因为当我调试它运行良好时,它只在我并行运行时,似乎测试没有尝试运行,因为它在 78 毫秒后失败并且测试开启平均每个大约 30 秒。在“钩子”类的初始化期间做出有根据的猜测 id 假设它

标签: c# selenium reporting specflow extent


【解决方案1】:

当我尝试在其自己的 ScenarioContext 容器上使用它时,发现响应是由于 specflow 出现了一点问题。因为将对象容器移出并返回到场景上下文都开始工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2019-04-27
    • 2012-05-18
    • 2018-02-15
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多