Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为并行执行设置selenium webdriver_Selenium_Testing_Specflow_Xunit - Fatal编程技术网

为并行执行设置selenium webdriver

为并行执行设置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

我试图通过xUnit控制台运行程序并行执行一大套selenium测试

这些已经执行,我看到3个chrome窗口打开,但是第一个send key命令只对一个窗口执行3次,导致测试失败

在每个场景之前,我已经在objectcontainer中注册了我的驱动程序,如下所示:

[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;
}