我尝试在本地运行我的chrome扩展程序的测试。
我有selenium服务器(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
任何评论的加载扩展变体都会产生相同的结果。
运行的节点类型和独立类型之间是否有任何区别(在扩展加载的情况下)? 还是我的错误在哪里?
我将很高兴为您提供帮助!
答案 0 :(得分:0)
最近想出了解决方案,这很麻烦。 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');
}