无法使用Selenium安装WebExtension

问题描述 投票:4回答:2

我正在尝试测试我的firefox webextension但firefox拒绝安装它,因为它没有install.rdf文件。但webextensions不再使用该文件了。

const firefox = require('selenium-webdriver/firefox');
const webdriver = require('selenium-webdriver');
require('geckodriver');

let profile = new firefox.Profile();
profile.addExtension(process.cwd() + '/build/firefox/');
profile.setPreference('extensions.firebug.showChromeErrors', true);


let options = new firefox.Options().setProfile(profile);

let _driver = new webdriver.Builder()
.forBrowser('firefox')
.setFirefoxOptions(options)
.build();

错误:ENOENT:没有这样的文件或目录,打开'/dev/webext/build/firefox/install.rdf'

是否有一个设置,我需要启用它来告诉它这是一个webextension?

selenium firefox selenium-webdriver firefox-webextensions selenium-firefoxdriver
2个回答
4
投票

Selenium v​​3.4.0尚不支持WebExtension API。方法Profile::addExtension仅适用于遗留插件,其中install.rdf存在于根。

要测试Web扩展,您可以使用已安装扩展的配置文件,也可以实现自v0.17.0以来GeckoDriver可用的自定义命令:

var webdriver = require('selenium-webdriver');
var Command = require('selenium-webdriver/lib/command').Command;


function installWebExt(driver, extension) { 
  let cmd = new Command('moz-install-web-ext')
    .setParameter('path', path.resolve(extension))
    .setParameter('temporary', true);

  driver.getExecutor()
    .defineCommand(cmd.getName(), 'POST', '/session/:sessionId/moz/addon/install');

  return driver.schedule(cmd, 'installWebExt(' + extension + ')');
}


var driver = new webdriver.Builder()
  .forBrowser('firefox')
  .build();

installWebExt(driver, "C:\\temp\\extension.zip");

1
投票

这是FirefoxDriver的一个问题。这个问题已经记录在SeleniumHQ/selenium#4184mozilla/geckodriver#759

GeckoDriver says that

暂时的解决方法是使用geckodriver 0.17.0提供的附加端点来获取从本地磁盘安装的扩展。

https://github.com/mozilla/geckodriver/blob/release/src/marionette.rs#L66

所以你必须使用geckodriver端点来做到这一点。我已经提到过如何使用端点here

© www.soinside.com 2019 - 2024. All rights reserved.