【问题标题】:Does Selenium support multiple browser windows running with different profiles?Selenium 是否支持使用不同配置文件运行的多个浏览器窗口?
【发布时间】:2020-10-24 22:23:52
【问题描述】:

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

我最初研究使用 Selenium 网格来控制多台机器来运行这些测试,但看起来不可能让特定步骤以特定顺序在特定机器上运行,这是必要的。因此,我正在考虑使用不同的 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);
    });
});

这似乎有效,除了一件事。当调用await driver2.quit(); 行时,出现错误:

Error: ECONNREFUSED connect ECONNREFUSED 127.0.0.1:[port number]

第二个浏览器窗口没有关闭。

问题是:

  1. Selenium 是否支持我正在尝试做的事情?

  2. 如果支持,我的代码有什么明显的问题吗?我在这里阅读了许多相关问题,以及其他地方的文档,但看起来让 Selenium 使用特定浏览器配置文件的过程随着时间的推移而发生了变化,所以我不能 100% 确信我现在所拥有的内容是正确的。

  3. 该错误消息来自哪里,它是什么意思?当我搜索它时,它似乎与 Selenium Grid 相关,正如我之前所说,我不会使用它。

【问题讨论】:

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

标签: javascript selenium selenium-webdriver


【解决方案1】:

这应该是可行的: https://sqa.stackexchange.com/a/35548/34209

我相信您遇到的错误不是因为多个驱动程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2014-01-17
    • 2015-10-26
    • 2013-08-15
    • 2011-11-26
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多