Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/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
Multithreading 如何同时使用2个Firefox驱动程序?Selenium支持多线程吗?_Multithreading_Testing_Selenium_Webdriver - Fatal编程技术网

Multithreading 如何同时使用2个Firefox驱动程序?Selenium支持多线程吗?

Multithreading 如何同时使用2个Firefox驱动程序?Selenium支持多线程吗?,multithreading,testing,selenium,webdriver,Multithreading,Testing,Selenium,Webdriver,如何同时使用2个Firefox驱动程序?Selenium支持多线程吗 我有下面的测试,它打开了两个firefox浏览器,但两个导航都只在第一个浏览器实例上发生 [Test] public void TestMultithreading() { var tasks = new List<Task> { new Task(goToBbc),

如何同时使用2个Firefox驱动程序?Selenium支持多线程吗

我有下面的测试,它打开了两个firefox浏览器,但两个导航都只在第一个浏览器实例上发生

  [Test]
    public void TestMultithreading()
    {
        var tasks = new List<Task>
                        {
                            new Task(goToBbc),
                            new Task(goToGoogle)
                        };

        tasks.ForEach(task => task.Start());

        Task.WaitAll(tasks.ToArray());
    }

    private void goToBbc()
    {
        openBrowserAndGoTo("http://www.bbc.com");
    }

    private void goToGoogle()
    {
        openBrowserAndGoTo("http://www.google.com");
    }

    private void openBrowserAndGoTo(string url)
    {
        var webDriver = new FirefoxDriver();
        webDriver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 1, 0));
        webDriver.Navigate().GoToUrl(url);
        Thread.Sleep(5000);
        webDriver.Quit();
    }
[测试]
public void testmulti-threading()
{
var tasks=新列表
{
新任务(goToBbc),
新任务(GoToLogle)
};
tasks.ForEach(task=>task.Start());
Task.WaitAll(tasks.ToArray());
}
私有void goToBbc()
{
openBrowserAndGoTo(“http://www.bbc.com");
}
私有void gotogogle()
{
openBrowserAndGoTo(“http://www.google.com");
}
私有void openBrowserAndGoTo(字符串url)
{
var webDriver=新的FirefoxDriver();
webDriver.Manage().Timeouts().ImplicitlyWait(新的时间跨度(0,1,0));
webDriver.Navigate().gotour(url);
睡眠(5000);
webDriver.Quit();
}
希望问题清楚


谢谢,

Selenium RC/WebDriver旨在自动化浏览器。如果您想并行运行多个测试,您应该看看如何通过Selenium Grid/RemoteDriver运行脚本。

要并行运行WebDriver测试,每个线程需要一个WebDriver实例。每个实例对应一个浏览器会话。您的示例应该有效,因为每个任务都创建自己的实例

您可能还需要一个支持并行化的测试运行程序:TestNG for Java,MBunit for.NET

也就是说,不同浏览器对多个webdriver实例的支持不同:

  • Chrome在本地运行多个Chrome实例时效果很好
  • Firefox有时可以工作,这取决于webdriver和FF的版本
  • IE无法在本地驱动多个实例

我们使用run a grid(大约20个远程)来支持所有浏览器上的并行执行

TestNG是并行运行测试的一个非常好的选项。我们将其用于产品自动化。

请尝试在Selenium中进行多处理,然后控制过程使用程序参数执行不同的操作。

既然其他人还没有提到这一点,我将向Maven及其Java中的Selenium插件发出一声欢呼

Maven的Surefire和Failsafe插件管理构建(本例中为套件)的测试生命周期。我已经将这些插件与JUnit一起用于运行多线程selenium测试。我相信TestNG也同样有能力

对于这种类型的项目,您可以从命令行运行
mvn test
mvn verify
,以启动测试并报告结果。如果您的IDE支持maven构建,那么您可以右键单击测试包并从那里执行测试

您可以在本地运行测试(它将弹出许多浏览器),或者将您的套件指向远程集线器以远程执行测试


我还应该注意到,您需要将重点放在编写本质上是原子的测试上,这些测试可以单独运行,然后让构建系统作为一个套件来执行它们。

附带问题:我一直认为如果我有两个实例,与driver1和driver2一样,它将运行两个不同的浏览器窗口…我上面的代码将打开两个浏览器实例,但导航、findelement等仅在第一个打开的浏览器上发生@bryanbcook,在我的示例中有没有代码示例如何使用远程驱动程序?这个测试对我来说还可以(在Chrome 27、IE 10、Firefox 21中测试)。我认为这种行为现在已经固定了。