4

我想測試我的Firefox的webextension但firefox拒絕安裝它,因爲它沒有install.rdf文件。但該文件不再由webextensions使用。無法安裝WebExtension與硒

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(); 

Error: ENOENT: no such file or directory, open '/dev/webext/build/firefox/install.rdf'

是否有我需要啓用告訴它這是一個webextension設置?

回答

3

Selenium v​​3.4.0尚不支持WebExtension API。方法Profile::addExtension僅適用於舊版插件,其中install.rdf位於根目錄。

要測試網絡的擴展,您可以使用該擴展程序已經安裝配置文件,也可以實現可用GeckoDriver自定義命令,因爲v0.17.0:

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"); 
+0

謝謝!這樣可行!。有一個問題,是否有可能檢索擴展內部UUID?因此,我可以訪問擴展的彈出框 – Cornwell

+0

檢查'installWebExt'返回的值,它可能是UUID:'installWebExt(...)。then(id => ...)' –

+0

不幸的是它是擴展的ID在清單中,所以它不能用於此。但是我想我可以通過'about:debugging#addons'頁面進行一些醜陋的修改。 再次感謝! – Cornwell

1

這是FirefoxDriver的一個問題。此問題已記錄在倆SeleniumHQ/selenium#4184mozilla/geckodriver#759

GeckoDriver says that

A workaround for the time being would be to use the add-on endpoints geckodriver 0.17.0 provides to get an extension installed from the local disk.

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

所以,你必須使用geckodriver端點做到這一點。我已經提到如何使用端點here

+0

感謝。不幸的是,'getAddressOfRemoteServer'似乎並不可用,所以我無法獲得PORT連接到 – Cornwell