我可以使用selenium-webdriver一次(同时)运行多个实例吗?

yaq*_*awa 7 javascript selenium selenium-webdriver

我正在尝试使用Selenium来自动化文件上传.

我已经用selenium-webdriver写了一个很小的程序.

问题是,需要上传数千个文件,我想同时运行多个浏览器实例以加快自动化.所以我尝试过这样的事情

var i = 0;
while (i < 10) {
    i++;
    var driver = new webdriver.Builder()
            .forBrowser('firefox')
            .build();

    // login and upload files......
}
Run Code Online (Sandbox Code Playgroud)

我预计这将同时创建10个浏览器实例,并同时进行自动化.

但实际上......上面的代码将逐个创建浏览器实例,这意味着,在上一个实例完成之前,它不会创建另一个实例.

我也尝试在多个shell实例中执行该程序,这将为我启动多个浏览器实例,但我只是不想这样做...

Sha*_*mik 5

那么你需要创建多个线程而不是循环,然后你可以在并行线程中开始每个上传。你走在正确的轨道上。你不需要硒网格来实现这一点。

查找多线程。你可以从这个答案开始

您需要网格来执行多个浏览器会话是不对的。您可以通过创建多个驱动程序对象并对其进行管理来调用多个浏览器会话。如果您愿意,每个会话都将是单独的。

网格用于扩展,因为您可以运行的浏览器实例数量有限制,以保持机器性能不变并测试稳定。就像一台机器中超过 5 个 chrome 实例。如果你想做更多,那么你必须使用 selenium Grid。

  • 这是一个非常令人困惑的“正确”答案。这个问题用 JavaScript 标记,但这个答案说要查找多线程 - 这在 JavaScript 中是不可能的。它还链接到与 Java 相关的帖子,因此我可以看到混淆的来源。在这些评论中,有些混乱得到了一定程度的解决。但是那些将来在谷歌上搜索这篇文章的人我已经在下面给出了正确的具体答案。 (3认同)