量角器:无法在测试中创建新的浏览器实例

Protractor: Unable to create a new browser instance in a test

我正在尝试进行视频通话,我需要两个浏览器来模拟两个不同的用户。因此,我试图在我的测试之间创建一个新的浏览器实例。我正在使用以下代码创建一个新的浏览器实例:

const config = {
       browserName: 'chrome',
       platformName: 'windows 10',
       'acceptInsecureCerts': true,
       'chromeOptions': {
             'args': [ "--use-fake-device-for-media-stream", "--use-fake-ui-for-media-stream", "--ignore-certificate-errors"]
       },
};
const driver: WebDriver = new protractor.Builder().withCapabilities(config).build();
newBrowser = new protractor.ProtractorBrowser(driver);
await newBrowser.driver.get('https://google.com');

当我 运行 代码时,我在最后一行收到以下错误

- Failed: Cannot read property 'onPageLoad' of undefined

有什么我遗漏的吗?

在此先感谢您的帮助!

查看此库 (https://www.npmjs.com/package/protractor-parallel-instances) 和量角器的源代码后,我现在终于能够创建任何浏览器实例,前提是我已连接 webdriver 和必要的设备或处于可访问状态。我使用以下函数创建了一个浏览器实例

    const config = {
           browserName: 'chrome',
           platformName: 'windows 10',
           'acceptInsecureCerts': true,
           'chromeOptions': {
             'args': [ "--use-fake-device-for-media-stream", "--use-fake-ui-for-media-stream", "--ignore-certificate-errors"]
           },
    };    
    async createNewBrowserSession(capabilities: any): Promise<ProtractorBrowser>{
        const conf = new ConfigParser();
        const config = conf.getConfig();
        config.capabilities = capabilities;
        const ptorRunner = new ProtractorRunner.Runner(config);
        const newBrowser = await ptorRunner.createBrowser(config.plugins_);
        return newBrowser as ProtractorBrowser;
    }
    newBrowser = await this.createNewBrowserSession(capabilities);
    await newBrowser.get('https://google.com');

这会使用机器 运行 量角器可用的网络驱动程序生成一个浏览器实例。如果你想使用量角器启动的 selenium 服务器,你需要做一些更多的改变

在你的protractor.conf.js中,设置

    directConnect: false

并将以上代码更新为以下内容:

    const config = {
           browserName: 'chrome',
           platformName: 'windows 10',
           'acceptInsecureCerts': true,
           'chromeOptions': {
             'args': [ "--use-fake-device-for-media-stream", "--use-fake-ui-for-media-stream", "--ignore-certificate-errors"]
           },
    };    
    async createNewBrowserSession(capabilities: any): Promise<ProtractorBrowser>{
        const conf = new ConfigParser();
        const config = conf.getConfig();
        config.capabilities = capabilities;
        const ptorRunner = new ProtractorRunner.Runner(config);
        const newBrowser = await ptorRunner.createBrowser(config.plugins_);
        return newBrowser as ProtractorBrowser;
    }
    await browser.getProcessedConfig().then((obj) => {
        capabilities.seleniumAddress = obj.seleniumAddress;
    });
    newBrowser = await this.createNewBrowserSession(capabilities);
    await newBrowser.get('https://google.com');