2012-12-05 19 views
2

我想讓Selenium在測試時安裝擴展。我正在使用最新的獨立JAR(selenium-server-standalone-2.26.0.jar)和Firefox 17來運行我的測試。當我不想添加擴展名時,該程序完美工作。硒試圖添加擴展時拋出錯誤 - 「無法連接到二進制FirefoxBinary」和「無法找到包含擴展ID的節點」

我已驗證多次,我試圖使用的擴展文件存在,並可以由程序訪問,事實上包含有效的install.rdf,因爲我用它來手動安裝擴展名在我的默認Firefox個人資料。

我的代碼是:

FirefoxProfile fp=new FirefoxProfile(); 
File ext=new File("myext-2.17.xpi"); 
     try { 
      fp.addExtension(ext); 
      fp.setPreference("extensions.myext.version", "myext-2.17"); 
     } catch (Exception e2) { 
      e2.printStackTrace(); 
     } 
WebDriver wd=new FirefoxDriver(fp); 

完整的堆棧跟蹤如下:使用FF16和FF9也存在

Exception in thread "pool-1-thread-2" org.openqa.selenium.WebDriverException: Failed to connect to binary FirefoxBinary(C:\Program Files (x86)\Mozilla Firefox\firefox.exe) on port 7055; process output follows: 
null 
Build info: version: '2.26.0', revision: '18041', time: '2012-11-01 19:33:38' 
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_02' 
Driver info: driver.version: FirefoxDriver 
    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:122) 
    at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:243) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:109) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:189) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:178) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95) 
    at TrafficGenerator.BrowserWindow.run(BrowserWindow.java:80) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.openqa.selenium.WebDriverException: org.openqa.selenium.WebDriverException: Cannot locate node containing extension id: C:\Users\Vivek\AppData\Local\Temp\unzip3924903411706376479stream\install.rdf 
Build info: version: '2.26.0', revision: '18041', time: '2012-11-01 19:33:38' 
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_02' 
Driver info: driver.version: FirefoxDriver 
Build info: version: '2.26.0', revision: '18041', time: '2012-11-01 19:33:38' 
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_02' 
Driver info: driver.version: FirefoxDriver 
    at org.openqa.selenium.firefox.internal.FileExtension.readIdFromInstallRdf(FileExtension.java:141) 
    at org.openqa.selenium.firefox.internal.FileExtension.writeTo(FileExtension.java:60) 
    at org.openqa.selenium.firefox.FirefoxProfile.installExtensions(FirefoxProfile.java:465) 
    at org.openqa.selenium.firefox.FirefoxProfile.layoutOnDisk(FirefoxProfile.java:443) 
    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:77) 
    ... 10 more 

錯誤。 關於什麼可能是錯誤的原因以及我如何解決它的任何想法?

+0

如果將您的Firefox版本降級到16,會發生什麼情況? – Arran

+0

@Arran - 在FF 16和FF 9上發生同樣的問題。 – bcosynot

+0

反覆調試。註釋掉除頂線之外的所有內容,看看是否失敗。然後繼續,直到它。配置文件可能不是傳遞給驅動程序的合法對象。 – Shawn

回答

-1
Caused by: org.openqa.selenium.WebDriverException: org.openqa.selenium.WebDriverException: Cannot locate node containing extension id: C:\Users\Vivek\AppData\Local\Temp\unzip3924903411706376479stream\install.rdf 

看起來像你的擴展在RDF描述缺少必要的「擴展ID」字段。

您可能會嘗試在沒有您的擴展名的情況下啓動Firefox,並嘗試在沒有硒的情況下將您的擴展程序安裝到正在運行的Firefox中。

+0

在這個問題中,我已經提到過,手動執行擴展時會正確安裝。擴展名字段存在於install.rdf文件中。 – bcosynot

+0

對不起,沒有注意到,你有沒有嘗試使用xpi的絕對路徑?如果您只是使用該名稱,則可能無法正常工作,因爲您的應用程序工作目錄可能不是您認爲的目錄,特別是當您從Eclipse等IDE運行測試時。 但是在別的東西上可能沒有ID,你可以調試相應的硒代碼:http://www.jarvana.com/jarvana/view/org/seleniumhq/selenium/selenium-firefox-driver/2.0a6/ selenium-firefox-driver-2.0a6-sources.jar!/org/openqa/selenium/firefox/internal/FileExtension.java?format = ok – Adrian

+0

是的,嘗試過絕對路徑。我在提到的問題中提到該程序可以訪問該文件,並且我已經通過程序本身驗證它是否存在。 – bcosynot