【问题标题】:BoDi.ObjectContainerException : Interface cannot be resolved: OpenQA.Selenium.IWebDriverBoDi.ObjectContainerException:接口无法解析:OpenQA.Selenium.IWebDriver
【发布时间】:2019-06-08 20:18:27
【问题描述】:

我正在使用 C# 创建一个新的 Selenium 框架,因为 PageFactory 已弃用且不再使用。 我正在使用依赖注入,我的代码构建没有错误,但是当我运行我的测试时,chrome 浏览器没有打开并且我收到错误:

Message: BoDi.ObjectContainerException : Interface cannot be resolved: 
OpenQA.Selenium.IWebDriver (resolution path: 
UnitTestProject1.Steps.LoginSteps->UnitTestProject1.Page.LoginPage)

我不确定出了什么问题。我认为与驱动程序有关。一些帮助表示赞赏,谢谢。

基类

namespace UnitTestProject1
{
[Binding]    
public class SpecflowBaseTest : TechTalk.SpecFlow.Steps
{
    protected IWebDriver Driver { get; }
    //protected LoginPage LoginPage { get; }

    /*public SpecflowBaseTest()
    {
    }*/

    public SpecflowBaseTest(IWebDriver driver)
    {
        Driver = driver;            
    }

    public void NavigateToURL(string URL)
    {
        Driver.Navigate().GoToUrl(URL);
    }
}
}

Specflow 挂钩

namespace UnitTestProject1
{
public class SpecFlowHooks
{
    private readonly IObjectContainer container;

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

    [BeforeStep]
    public void CreateWebDriver()
    {
        // Create and configure a concrete instance of IWebDriver
        IWebDriver driver = new ChromeDriver();
        {

        };

        // Make this instance available to all other step definitions
        container.RegisterInstanceAs(driver);
    }

    [AfterStep]
    public void DestroyWebDriver()
    {
        IWebDriver driver = container.Resolve<IWebDriver>();

        driver.Close();
        driver.Dispose();
    }
}
}

登录页面类

namespace UnitTestProject1.Page
{
public class LoginPage : SpecflowBaseTest
{
    public LoginPage(IWebDriver browser) : base(browser)

    {
        //Driver = browser;
    }

    public void Login(string Username, string Password)
    {
        UsernameField.SendKeys(Username);
        PasswordField.SendKeys(Password);
        LoginButton.Click();
    }

    public void CheckUserIsLoggedIn(string Username)
    {
        AccountUsername.Displayed.ShouldBe(true, Username);
    }

    [FindsBy(How = How.CssSelector, Using = "#LoginUsername")]
    private IWebElement UsernameField { get; set; }

    [FindsBy(How = How.CssSelector, Using = "#LoginPassword")]
    private IWebElement PasswordField { get; set; }

    [FindsBy(How = How.CssSelector, Using = "#login-submit-button")]
    private IWebElement LoginButton { get; set; }

    [FindsBy(How = How.CssSelector, Using = "#div.accountUsrename")]
    private IWebElement AccountUsername { get; set; }

}
}

登录步骤文件

namespace UnitTestProject1.Steps
{
[Binding, Parallelizable]
public class LoginSteps : SpecflowBaseTest
{
    //protected LoginPage LoginPage;
    //protected IWebDriver Driver;
    private LoginPage LoginPage { get; }

    public LoginSteps(LoginPage loginpage, IWebDriver driver) : base(driver)
    {
        //Driver = driver;
        this.LoginPage = new LoginPage(driver);
    }

    [Given(@"I navigate to (.*)")]
    public void GivenINavigateToHttpstesta_Com(string URL)
    {
        NavigateToURL(URL);
    }

    [Given(@"I enter bw_(.*) and (.*)")]
    public void GivenIEnterBw_Valid_UserAnd(string Username, string Password)
    {            
        LoginPage.Login(Username, Password);
    }

    [Then(@"I am logged in as valid_user")]
    public void ThenIAmLoggedInAsBw_Valid_User()
    {
        //LoginPage.
    }
}
}

功能文件

Feature: Login
In order to log into my account
As a User
I want to Log in and view my account

@Login
Scenario: Check user can log in account
Given I navigate to https://testa.com
And I enter valid_user and abc123   
Then I am logged in as valid_user

【问题讨论】:

  • 您好,您的问题解决了吗?我已经尝试用 SPecFlow 和 Pages 对象做测试框架并且有问题:BoDi.ObjectContainerException : Interface cannot be resolved: OpenQA.Selenium.IWebDriver (resolution path: AutomationTestSiiFramework.Tests.TheInternet.Tests.SpecFlowFeature1Steps)

标签: c# selenium selenium-webdriver specflow


【解决方案1】:

您在SpecFlowHooks 的类名上方缺少[Binding] 属性。 [Binding] 属性是 SpecFlow 在识别步骤定义和“挂钩”文件时查找的内容。这意味着 SpecFlowHooks 类方法没有被执行,因此 IWebDriver 对象没有被注册到 SpecFlow 的依赖注入框架中。

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2019-10-13
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多