当前位置: 首页 > 知识库问答 >
问题:

硒网络驱动程序。通过硒网格运行测试时,如何安装chrome扩展?

邓驰
2023-03-14

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

我有selenium服务器(v.3.141.59)。

我有chromedriver(2.44节)

我有chrome浏览器(v.70.0.3538.110)

和selenium-webDrive 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

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

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

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

共有1个答案

公西修文
2023-03-14

最近想出了解决方案,它相当粗糙。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');
}
 类似资料:
  • 我查了一下,我怎么能默默地运行硒:在这里找到了下一个伟大的答案 我正在尝试让selenium正常运行,直到一些操作完成,然后在后台运行它。 有可能吗? 高级Oz中的thanx

  • 我的目标是使用硒为Python自动在线账单支付。 使用以下代码使用 Web 驱动程序登录成功: 登录后,一个新的页面加载,我的下一步是点击一个链接。代码: 什么也没发生。没有导航到该法案 但仍然没有。我还应该尝试其他什么? 错误: Traceback(最近调用的最后一次):File"/home/队长/. PyCharmEdu30/config/划痕/scratch_1.py",第12行,在clic

  • 正在研究尝试理解显式等待的方法。 所以单选按钮被点击后,输入形式发生了变化,所以我把给它一个时间元素出现,否则会出错“元素不可见......”。所以我认为现在是理解显式等待的好时机,因为我需要等到元素出现。 但出现错误“Selenium::WebDriver::error::ElementNotVisibleError:Element当前不可见,因此可能无法与之交互”。为什么这段代码不等到元素出现

  • 我正在使用selenium webdriver并创建一个chrome驱动程序实例。当我尝试向下滚动和向上滚动时,我得到以下错误信息。此外,我可以看到一个错误信息“Chrome正在由一个自动化软件控制”。看到这个错误很烦人,虽然我无法在Chrome浏览器中更改任何设置来实现自动化。 错误信息: /System/Library/Frameworks/python . framework/Version

  • 我使用appium和java自动化Android应用程序。作为一个初学者,我想知道TestNG和网格之间的区别。冲浪,但不能得到答案。

  • 我试图通过TestContainer运行Selenium测试。 这是由于 但是,如果我直接从一个测试调用它,它就会通过并且找到方法,例如。 但是,如果通过类调用此方法,则会抛出 这是我的测试方法: } 此测试从 其中抛出 这是一个演示项目,我已设置尝试和重新创建的问题,这里是我的整个文件: