BoDi.ObjectContainerException:'无法解析接口:OpenQA.Selenium.IWebDriver

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

我正在尝试通过使用ContextInjection和Specflow使用IObjectContainer。我在一个解决方案中有多个项目(这是我的项目所必需的),所以我认为这可能是原因。 BasePageObjectsSteps位于不同的项目。

我可以注册webdriver实例并进行其他项目吗?我尝试使用specflow尝试,但是没有用。

[调试时甚至都没有输入Steps类。编译时,它将跳过.feature文件上的所有步骤行,并在末尾引发异常:BoDi.ObjectContainerException: 'Interface cannot be resolved: OpenQA.Selenium.IWebDriver

当我删除构造函数时,它至少会转到Steps类上的定义方法。

在这里:

BaseTest类:

    [Binding]
    public class BaseGUITest
    {
        public IWebDriver driver;

        public IObjectContainer container;

        public BaseGUITest(IObjectContainer container)
        {
            this.container = container;
        }


        [BeforeScenario(Order = 0)]
        public void BrowseInitialize()
        {

            driver = new ChromeDriver();
            container.RegisterInstanceAs<IWebDriver>(driver);

        }

Page类:

namespace PageObjects
{
    public class SearchPage
    {
        private readonly IWebDriver driver;


        public SearchPage(IWebDriver driver)
        {
            this.driver = driver;
        }

         public IWebElement GetTxtSearch()
        {
            return driver.FindElement(By.Name("q"));
        }

}

Steps类:

namespace Features
{
    [Binding]
    public class SearchSteps
    {
        private readonly SearchPage searchPage;

        public SearchSteps(IWebDriver driver)
        {
            searchPage= new SearchPage(driver);
        }

        [Given(@"I am on search home ")]
        {
           . . .
        }
c# selenium-webdriver dependency-injection specflow
1个回答
0
投票

您可以使用specflow中的钩子绑定来完成此操作,这些绑定非常强大,具体取决于您的情况和绑定。在您的情况下,界面看起来像是IWebDriver

[BeforeFeature]
    public static void RegisterConcreteType(IObjectContainer objectContainer)
    {
        var myClass = new class();
        objectContainer.RegisterInstanceAs<Iinterface>(myClass);
    }
© www.soinside.com 2019 - 2024. All rights reserved.