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
Javascript 我可以使用selenium webdriver同时运行多个实例吗?_Javascript_Selenium_Selenium Webdriver - Fatal编程技术网

Javascript 我可以使用selenium webdriver同时运行多个实例吗?

Javascript 我可以使用selenium webdriver同时运行多个实例吗?,javascript,selenium,selenium-webdriver,Javascript,Selenium,Selenium Webdriver,我正在尝试使用Selenium自动上传文件 我已经用它写了一个小程序 问题是,有数千个文件需要上传,我想同时运行多个浏览器实例来加速自动化。所以我试过这样的方法 var i = 0; while (i < 10) { i++; var driver = new webdriver.Builder() .forBrowser('firefox') .build(); // login and upload files.

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

我已经用它写了一个小程序

问题是,有数千个文件需要上传,我想同时运行多个浏览器实例来加速自动化。所以我试过这样的方法

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

    // login and upload files......
}
var i=0;
而(i<10){
i++;
var driver=new webdriver.Builder()
.forBrowser(“firefox”)
.build();
//登录并上传文件。。。。。。
}
我预计这将一次创建10个浏览器实例,并同时实现自动化

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


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

这正是我的目的

您需要创建多个线程,而不是循环,然后您可以在并行线程中启动每个上载。你在正确的轨道上。您不需要selenium grid来实现这一点

查找有关多线程的信息。你可以从这个开始

您需要网格来执行多个浏览器会话,这是不对的。只需创建多个驱动程序对象并对其进行管理,即可调用多个浏览器会话。如果您希望,每个会话都是独立的


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

您应该为要打开的每个新浏览器创建一个新的WebDriver实例及其功能

下面将在五个单独的Chrome实例中打开Google

import * as webdriver from "selenium-webdriver";
import * as Chrome from 'selenium-webdriver/chrome';

function loadSelenium(){
    let options = new Chrome.Options();
    let capabilities = options.toCapabilities();
    console.log('loading another');
    return new webdriver.Builder()
        .forBrowser('chrome')
        .withCapabilities(capabilities)
        .build();
}

for(let i = 0; i < 5; i++) {
    let driver = loadSelenium();
    driver.get('http://www.google.com');
}
import*作为“selenium webdriver”中的webdriver;
从“selenium webdriver/Chrome”导入*作为Chrome;
函数loadSelenium(){
let options=new Chrome.options();
让能力=options.toCapabilities();
log('加载另一个');
返回新的webdriver.Builder()
.forBrowser('chrome')
.具备能力(能力)
.build();
}
for(设i=0;i<5;i++){
让driver=loadSelenium();
司机,上车http://www.google.com');
}
parallel=“methods”:TestNG将在单独的线程中运行所有测试方法。依赖方法也将在单独的线程中运行,但它们将遵守您指定的顺序

parallel=“tests”:TestNG将在同一线程中运行同一标记中的所有方法,但每个标记将在单独的线程中。这允许您将所有非线程安全的类分组在同一个线程中,并保证它们都在同一个线程中运行,同时利用TestNG,使用尽可能多的线程来运行测试

parallel=“classes”:TestNG将在同一线程中运行同一类中的所有方法,但每个类将在单独的线程中运行


parallel=“instances”:TestNG将在同一线程中运行同一实例中的所有方法,但两个不同实例上的两个方法将在不同线程中运行。

您不需要selenium grid并行执行测试,但使用grid管理10个实例将是小菜一碟。只需将同一台机器用于节点和主机,并将测试指向中心。完成了。@Shamik非常感谢你!但是如何在node.js中创建多个线程?@user2272115请看这个答案,忽略概要文件部分,然后看实现。在节点中,您不需要多个线程。这些函数是异步的,所以它们不会等待第一个函数完成。@user2272115有帮助吗?这是一个非常令人困惑的“正确”答案。这个问题是用JavaScript标记的,但是这个答案说要查找多线程——这在JavaScript中是不可能的。它还链接到一篇与Java相关的文章,因此我可以看到混淆的根源。这些评论在某种程度上解决了这种困惑。但是那些以后在谷歌上搜索这篇文章的人,我已经在下面给出了正确的具体答案。只是好奇,你发布的代码在你的实际脚本中是否包装在
execute\u script
操作中?TestNg是Java库吗?这个问题是关于JavaScript的。