Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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是否支持使用不同配置文件运行多个浏览器窗口?_Javascript_Selenium_Selenium Webdriver - Fatal编程技术网

Javascript Selenium是否支持使用不同配置文件运行多个浏览器窗口?

Javascript Selenium是否支持使用不同配置文件运行多个浏览器窗口?,javascript,selenium,selenium-webdriver,Javascript,Selenium,Selenium Webdriver,我正在为一个web应用程序编写测试自动化。我需要测试的产品支持的功能之一如下。不同的用户可以同时登录到不同的计算机上,当用户1在计算机1上输入一些数据时,计算机2上用户2的视图会自动实时更新该数据,而无需重新加载浏览器 我最初研究使用Selenium grid来控制多台机器来运行这些测试,但看起来不可能在特定机器上以特定顺序运行特定步骤,这是必要的。所以我打算在一台机器上运行所有东西,使用不同的Chrome配置文件 到目前为止,我的示例代码如下所示: var selenium1 = requir

我正在为一个web应用程序编写测试自动化。我需要测试的产品支持的功能之一如下。不同的用户可以同时登录到不同的计算机上,当用户1在计算机1上输入一些数据时,计算机2上用户2的视图会自动实时更新该数据,而无需重新加载浏览器

我最初研究使用Selenium grid来控制多台机器来运行这些测试,但看起来不可能在特定机器上以特定顺序运行特定步骤,这是必要的。所以我打算在一台机器上运行所有东西,使用不同的Chrome配置文件

到目前为止,我的示例代码如下所示:

var selenium1 = require('selenium-webdriver');
var selenium2 = require('selenium-webdriver');
const chrome1 = require('selenium-webdriver/chrome');
const chrome2 = require('selenium-webdriver/chrome');

var udd = "C:\\Users\\phil\\AppData\\Local\\Google\\Chrome\\User Data\\";
var pd1 = "Profile 5";
var pd2 = "Profile 6";

const chromeOptions1 = new chrome1.Options();
chromeOptions1.addArguments(`user-data-dir=${udd}`);
chromeOptions1.addArguments(`profile-directory=${pd1}`);

const chromeOptions2 = new chrome2.Options();
chromeOptions2.addArguments(`user-data-dir=${udd}`);
chromeOptions2.addArguments(`profile-directory=${pd2}`);

var driver1 = new selenium1.Builder()
.forBrowser("chrome")
.setChromeOptions(chromeOptions1)
.build();

var driver2 = new selenium2.Builder()
.forBrowser("chrome")
.setChromeOptions(chromeOptions2)
.build();

jasmine.DEFAULT_TIMEOUT_INTERVAL = 90000;

describe('multiple browser test', function () {
    afterAll(async function () {
        await driver1.quit();
        await driver2.quit();
    });

    it('can open a web page', async function () {
            await driver1.get("http://www.yahoo.com");
            await driver2.get("http://www.bing.com");
            await driver1.sleep(5000);
            await driver2.sleep(5000);
    });
});
这似乎是可行的,除了一件事。当线路
等待驱动程序2.quit()时时,我得到一个错误:

错误:ECONREFUNCE connect ECONREFUNCE 127.0.0.1:[端口号]

并且第二个浏览器窗口不会关闭

问题是:

  • Selenium支持我所做的事情吗

  • 如果支持,我的代码是否有明显的错误?我在这里阅读了许多相关问题,以及其他地方的文档,但让Selenium使用特定浏览器配置文件的过程似乎随着时间的推移而发生了变化,因此我不能100%相信我现在所说的是正确的

  • 错误消息来自哪里,它意味着什么?当我在上面搜索时,它似乎与Selenium Grid有关,正如我之前所说,我不使用Selenium Grid

  • 这应该是可行的:


    我相信您遇到的错误不是由于多个驱动程序造成的。

    简短的回答是不,您不能在多个Chrome会话中使用多个配置文件(用户定义的目录)。但是,通过使用两个不同的浏览器WebDriver实例(例如Chrome和FF),您可以轻松实现想要实现的目标。如果可以解决配置文件问题,您可以对一个Chrome实例使用多个选项卡/窗口。该错误消息来自您使用两个驱动程序创建了两个会话,但当您发出
    .quit
    命令时,它会终止Chrome会话。然后,对
    .quit()
    的第二次调用不再有要关闭的会话(要连接的浏览器),因此生成了EconRefused错误。因此,尽管它打开了两个不同的Chrome窗口,我复制了创建它们的所有内容(Chrome、chromeOptions、驱动程序等),下面仍然只有一个Chrome会话?我从来没有想到过。很高兴知道,谢谢。这不是一个Chrome会话,而是一个驱动程序实例。问题出在Selenium实例上。打开两个Chrome窗口/选项卡并分别控制它们非常容易,只是不能有不同的用户数据目录