为并行执行设置selenium webdriver
我试图通过xUnit控制台运行程序并行执行一大套selenium测试 这些已经执行,我看到3个chrome窗口打开,但是第一个send key命令只对一个窗口执行3次,导致测试失败 在每个场景之前,我已经在objectcontainer中注册了我的驱动程序,如下所示:为并行执行设置selenium webdriver,selenium,testing,specflow,xunit,Selenium,Testing,Specflow,Xunit,我试图通过xUnit控制台运行程序并行执行一大套selenium测试 这些已经执行,我看到3个chrome窗口打开,但是第一个send key命令只对一个窗口执行3次,导致测试失败 在每个场景之前,我已经在objectcontainer中注册了我的驱动程序,如下所示: [Binding] public class WebDriverSupport { private readonly IObjectContainer _objectContainer; public WebDr
[Binding]
public class WebDriverSupport
{
private readonly IObjectContainer _objectContainer;
public WebDriverSupport(IObjectContainer objectContainer)
{
_objectContainer = objectContainer;
}
[BeforeScenario]
public void InitializeWebDriver()
{
var driver = GetWebDriverFromAppConfig();
_objectContainer.RegisterInstanceAs<IWebDriver>(driver);
}
然而,这并没有什么区别,似乎我的测试正在尝试对一个驱动程序执行所有命令
有人能告诉我哪里出了问题吗?这可能不是答案,但太大了,无法发表评论 如果只是从当前场景上下文中获取,而不是通过DI机制注入,那么为什么要使用
IObjectContainer
?我想试试这个:
[Binding]
public class WebDriverSupport
{
[BeforeScenario]
public void InitializeWebDriver()
{
var driver = GetWebDriverFromAppConfig();
ScenarioContext.Current.Add("Driver",driver);
}
}
然后在步骤中:
_driver = (IWebDriver)ScenarioContext.Current.Get("Driver");
只要
GetWebDriverRomappConfig
返回一个新实例,您就可以了…您不应该在并行执行上下文中使用ScenarioContext.Current
。如果您通过\u objectContainer.RegisterInstanceAs
注入驱动程序,您将通过steps类的构造函数中的构造函数注入来接收它,如下所示:
public MyScenarioSteps(IWebDriver driver)
{
_driver = driver;
}
更多信息:
在我看来,这是非常混乱的。可能看到了
GetWebDriverFromAppConfig()的内容
会很有用,因为这是您实际创建web驱动程序实例的地方,可能Hi,这只是一个基于app.config中的条目返回驱动程序的方法。在这个例子中,它是一个chrome驱动程序。
public MyScenarioSteps(IWebDriver driver)
{
_driver = driver;
}