我们有一组使用Specflow和Selenium WebDriver运行的UI测试。一夜之间,这些程序突然停止工作,现在在每种情况下都会引发以下错误:
BoDi.ObjectContainerException:无法解析接口:OpenQA.Selenium.IWebDriver(解析路径:Steps类)
我们正在使用Specflow上下文注入在每个场景之前注册我们的Web驱动程序,然后在每个步骤类中使用它:
[Binding]
public class Base
{
private readonly IObjectContainer _objectContainer;
private IWebDriver _webDriver;
public Base(IObjectContainer objectContainer)
{
_objectContainer = objectContainer;
}
[BeforeScenario]
public void Setup()
{
_webDriver = new ChromeDriver();
_objectContainer.RegisterInstanceAs<IWebDriver>(_webDriver);
}
....
}
步骤文件:
[Binding]
public class ProductSteps : TechTalk.SpecFlow.Steps
{
private readonly IWebDriver _driver;
public ProductSteps(IWebDriver driver)
{
_driver = driver;
}
}
在线查看Specflow文档,我看不到任何错误-而且也几乎看不到其他任何有此问题的人!
我花了相当多的时间试图深入浅出,但没有任何运气。
我们将NUnit用作测试运行程序,并通过nuget获得所有最新更新。
我的猜测是,您在ProductSteps类上还有另一个BeforeScenario钩子,该钩子可能会更早运行,并比其他BeforeScenatio触发时更早地创建实例,因此尚未注册Web驱动程序。
您可以控制挂钩的执行顺序,你可以使用Order
属性的参数(见http://www.specflow.org/documentation/Hooks/)[BeforeScenario(Order = 0)]
。
您也可以在http://gasparnagy.com/2016/08/specflow-tips-customizing-dependency-injection-with-autofac/上查看我的文章,该文章使用Autofac提供了更健壮的解决方案,具有更复杂的依赖关系。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句