我可以使用selenium网络驱动程序同时运行多个实例吗

Can I run multiple instances at once(simultaneously) with selenium-webdriver?

本文关键字:运行 实例 可以使 selenium 网络 驱动程序 我可以      更新时间:2023-09-26

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

我已经用selenium网络驱动程序编写了一个小程序。

问题是,有成千上万的文件需要上传,我想同时运行多个浏览器实例来加快自动化。所以我尝试了类似的东西

var i = 0;
while (i < 10) {
    i++;
    var driver = new webdriver.Builder()
            .forBrowser('firefox')
            .build();
    // login and upload files......
}

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

但实际上。。。上面的代码将逐个创建浏览器实例,也就是说,在上一个实例完成之前,它不会创建另一个实例。

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

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

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

需要网格来执行多个浏览器会话是不对的。只需创建多个驱动程序对象并对其进行管理,就可以调用多个浏览器会话。如果你想的话,每个会话都是分开的。

网格是用于扩展的,因为可以运行的浏览器实例数量有限制,可以保持机器性能的完整性和测试的稳定。就像一台机器中有5个以上的chrome实例一样。如果你想做更多的事情,那么你必须使用硒网格。

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

以下内容将在Chrome的五个独立实例中打开谷歌。

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');
}

这正是Selenium Grid的目的。

parallel="methods":TestNG将在单独的线程中运行所有测试方法。依赖方法也将在单独的线程中运行,但它们将遵循您指定的顺序。

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

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

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