【问题标题】:Selenium webdriver. How to install chrome extension when run test via selenium grid?硒网络驱动程序。通过 selenium 网格运行测试时如何安装 chrome 扩展?
【发布时间】:2019-05-05 22:55:45
【问题描述】:

我尝试在本地运行我的 chrome 扩展程序的测试。

我有 selenium-server (v.3.141.59)。

我有 chromedriver (v.2.44)

我有 chrome 浏览器 (v.70.0.3538.110)

和 selenium-webdriver npm 包 (v.^4.0.0-alpha.1)

我的 NodeJs 代码成功创建了新的 chrome 会话

        this._driver = new Builder()
          .forBrowser('chrome')
          .usingServer('http://localhost:4444/wd/hub')
          .setChromeOptions(new ChromeOptions()
            .addExtensions(config.extensionPath)
            //.addExtensions(buffer.toString('base64'))
            //.addArguments(`--load-extension=c:\path\to\extension`)
        .build();

但是

1) 当我将 selenium-server 作为独立服务器运行时,我的扩展程序成功安装并且没问题

java -jar selenium-server.jar -role standalone

2) 当我将 selenium-server 作为集线器运行,并将 selenium-server 的另一个实例作为节点运行时,新的 chrome 会话在没有安装扩展的情况下创建。

java -jar selenium-server.jar -role hub

java -Dwebdriver.chrome.driver=C:\path\to\chromedriver -jar selenium-server.jar -port 4445 -hub http://localhost:4444 -role node -browser browserName=chrome

加载扩展的任何注释变体都会给出相同的结果。

节点和独立运行类型之间有什么区别(在扩展加载的上下文中)? 还是我的错在哪里?

我会很高兴得到任何帮助!

【问题讨论】:

  • 嘿,你找到解决办法了吗?面临同样的问题
  • 很伤心,但我不...如果你能找到解决办法,请告诉我。

标签: node.js selenium google-chrome selenium-webdriver


【解决方案1】:

最近想出了解决方案,这很hacky。 在 selenium 的 github 中有一个关于这个的线程,但现在不记得了。解决方案是在使用远程集线器时将 chrome 选项功能键作为“goog:chromeOptions”传递。

示例:

setup() {
    const options = new Options();
    options.addArguments("disable-infobars");
    options.addArguments("start-maximized");

    options.addExtensions(this.encode(*extension*.crx'));


    const caps = new Capabilities();
    caps.set("browserName", 'chrome');

    //seems like neccessary hack for js bindings
    caps.set('goog:chromeOptions', options['options_']);

    let driver = await new Builder()
        .forBrowser('chrome')
        .withCapabilities(caps)
        .usingServer(*url*)
        .build(); 
}

encode(file) {
    var stream = require('fs').readFileSync(file);
    return Buffer.from(stream).toString('base64');
}

【讨论】:

  • (node:16426) UnhandledPromiseRejectionWarning: TypeError: Options 不是构造函数。如何解决?
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多