c# - IWebDriver 的 Specflow 上下文注入(inject)失败

标签 c# selenium webdriver specflow

我们有一套使用 Specflow 和 Selenium WebDriver 运行的 UI 测试。一夜之间,这些突然停止工作,现在在每个场景上抛出以下错误:


BoDi.ObjectContainerException : Interface cannot be resolved: OpenQA.Selenium.IWebDriver (resolution path: Steps class)

我们在每个场景之前使用 Specflow 上下文注入(inject)来注册我们的网络驱动程序,然后在每个步骤类中使用它:

[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 Hook ,该 Hook 可能会更早运行,并强制在触发其他 BeforeScenatio 之前创建实例,因此 Web 驱动程序尚未注册。

你可以控制钩子(Hook)的执行顺序,可以使用属性的Order参数(参见http://www.specflow.org/documentation/Hooks/):[BeforeScenario(Order = 0)].

您也可以查看我的帖子http://gasparnagy.com/2016/08/specflow-tips-customizing-dependency-injection-with-autofac/使用 Autofac 提供了具有更复杂依赖关系的更强大的解决方案。

关于c# - IWebDriver 的 Specflow 上下文注入(inject)失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39118432/

相关文章:

c# - 用 APIController 补充 [FromUri] 序列化

c# - 在 .NET 中以编程方式填充 Word 文档 (OpenXML) 中的内容控件

python - 如何点击以下网站的按钮?

selenium - 当使用 Selenium 和 Java 可以找到任何一个元素时如何选择一个元素

java - 如果从 DOM 中删除元素,显式等待会花费更多时间

c# - JSON.net 在没有模式的情况下反序列化 JSON

c# - 是否可以在我的应用程序中添加数据源连接向导?

java - 我们如何在使用 Cucumber 实现的同一场景中使用 Selenium WebDriver 和 Appium?

java - 如何在 Java Selenium 中禁用 Chrome 实验选项 Same-site-by-default-cookies?

javascript - 使用 webdriverjs 进行集成测试的复杂 CSS 选择器