来自外部程序集的 Specflow 绑定不起作用,无法加载程序集文件或程序集
Specflow Bindings from External Assemblies is not working and Could not load assembly file or assembly
我正在尝试通过 IObjectContainer
和 Specflow 来使用 ContextInjection
。
我在一个解决方案中有多个项目(我的项目是必需的),所以我认为这可能是原因。 Base
、PageObjects
和 Steps
放置在不同的项目上。
我可以注册webdriver实例并通过其他项目携带吗?我尝试使用 specflow,但没有用。
调试的时候连Steps
class都不输入。编译时,它会跳过 .feature
文件上的所有步骤行并在末尾抛出异常:BoDi.ObjectContainerException: 'Interface cannot be resolved: OpenQA.Selenium.IWebDriver
.
当我删除构造函数时,它至少会转到 Steps
class.
上的定义方法
编辑:
实际上这甚至没有找到[Bindings]
。我注意到将这些 Hooks
放在同一个项目中,效果很好。所以我发现这可能与 Specflow External Assembly
中的绑定有关。我试图用这些信息配置 app.config
但它没有用。
这是我放在 app.config
:
上的代码
<specFlow>
<stepAssemblies>
<stepAssembly assembly="AssemblyNameOfMyProject" />
</stepAssemblies>
</specFlow>
在此之后,我现在得到:
Techtalk.Specflow error: Could not load assembly file or assembly
开始了:
BaseTest
class:
[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
class:
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
class:
namespace Features
{
[Binding]
public class SearchSteps
{
private readonly SearchPage searchPage;
public SearchSteps(IWebDriver driver)
{
searchPage= new SearchPage(driver);
}
[Given(@"I am on search home ")]
{
. . .
}
您可以使用 specflow 中的钩子绑定来做到这一点,它非常强大,具体取决于您的情况和绑定。在你的情况下,界面看起来像 IWebDriver
[BeforeFeature]
public static void RegisterConcreteType(IObjectContainer objectContainer)
{
var myClass = new class();
objectContainer.RegisterInstanceAs<Iinterface>(myClass);
}
我正在尝试通过 IObjectContainer
和 Specflow 来使用 ContextInjection
。
我在一个解决方案中有多个项目(我的项目是必需的),所以我认为这可能是原因。 Base
、PageObjects
和 Steps
放置在不同的项目上。
我可以注册webdriver实例并通过其他项目携带吗?我尝试使用 specflow,但没有用。
调试的时候连Steps
class都不输入。编译时,它会跳过 .feature
文件上的所有步骤行并在末尾抛出异常:BoDi.ObjectContainerException: 'Interface cannot be resolved: OpenQA.Selenium.IWebDriver
.
当我删除构造函数时,它至少会转到 Steps
class.
编辑:
实际上这甚至没有找到[Bindings]
。我注意到将这些 Hooks
放在同一个项目中,效果很好。所以我发现这可能与 Specflow External Assembly
中的绑定有关。我试图用这些信息配置 app.config
但它没有用。
这是我放在 app.config
:
<specFlow>
<stepAssemblies>
<stepAssembly assembly="AssemblyNameOfMyProject" />
</stepAssemblies>
</specFlow>
在此之后,我现在得到:
Techtalk.Specflow error: Could not load assembly file or assembly
开始了:
BaseTest
class:
[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
class:
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
class:
namespace Features
{
[Binding]
public class SearchSteps
{
private readonly SearchPage searchPage;
public SearchSteps(IWebDriver driver)
{
searchPage= new SearchPage(driver);
}
[Given(@"I am on search home ")]
{
. . .
}
您可以使用 specflow 中的钩子绑定来做到这一点,它非常强大,具体取决于您的情况和绑定。在你的情况下,界面看起来像 IWebDriver
[BeforeFeature]
public static void RegisterConcreteType(IObjectContainer objectContainer)
{
var myClass = new class();
objectContainer.RegisterInstanceAs<Iinterface>(myClass);
}