BoDi.ObjectContainerException:无法解析接口:OpenQA.Selenium.IWebDriver
BoDi.ObjectContainerException : Interface cannot be resolved: OpenQA.Selenium.IWebDriver
我正在使用 C# 创建一个新的 Selenium 框架,因为 PageFactory 已被弃用且不再使用。
我正在使用依赖注入,我的代码构建没有错误但是当我 运行 我的测试时 chrome 浏览器没有打开并且我得到错误:
Message: BoDi.ObjectContainerException : Interface cannot be resolved:
OpenQA.Selenium.IWebDriver (resolution path:
UnitTestProject1.Steps.LoginSteps->UnitTestProject1.Page.LoginPage)
我不确定哪里出了问题。我认为与驱动程序有关。感谢您的帮助,谢谢。
基础Class
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();
}
}
}
登录页面Class
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
您缺少 SpecFlowHooks
的 class 名称上方的 [Binding]
属性。 [Binding]
属性是 SpecFlow 在识别步骤定义和 "hooks" 文件时查找的内容。这意味着 SpecFlowHooks class 方法没有被执行,因此 IWebDriver 对象没有在 SpecFlow 的依赖注入框架中注册。
我正在使用 C# 创建一个新的 Selenium 框架,因为 PageFactory 已被弃用且不再使用。 我正在使用依赖注入,我的代码构建没有错误但是当我 运行 我的测试时 chrome 浏览器没有打开并且我得到错误:
Message: BoDi.ObjectContainerException : Interface cannot be resolved:
OpenQA.Selenium.IWebDriver (resolution path:
UnitTestProject1.Steps.LoginSteps->UnitTestProject1.Page.LoginPage)
我不确定哪里出了问题。我认为与驱动程序有关。感谢您的帮助,谢谢。
基础Class
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();
}
}
}
登录页面Class
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
您缺少 SpecFlowHooks
的 class 名称上方的 [Binding]
属性。 [Binding]
属性是 SpecFlow 在识别步骤定义和 "hooks" 文件时查找的内容。这意味着 SpecFlowHooks class 方法没有被执行,因此 IWebDriver 对象没有在 SpecFlow 的依赖注入框架中注册。