2014-02-08 67 views
3

我正在編寫一個web自動化程序,到目前爲止,它使用Selenium的FirefoxDriver工作正常。但是,如果Firefox未安裝,我希望使用Chrome。我下載了ChromeDriver,把它放在Eclipse項目的一個文件夾中,然後運行它。在我加入System.setProperty("webdriver.chrome.driver", "Drivers/chromedriver.exe");後,它工作正常。但是,當我嘗試導出它時(使用Eclipse的標準導出)。它崩潰,我相信因爲它找不到ChromeDriver(我認爲這是因爲用FirefoxDriver導出它工作正常)。如何將ChromeDriver包含在JAR中?

我試圖將.JAR更改爲.ZIP以查看內部,並且我看到driver文件夾已被剝離,只需將chromedriver.exe放入頂層JAR中即可。我試圖將該屬性更改爲System.setProperty("webdriver.chrome.driver", "chromedriver.exe");,但仍然崩潰。

有誰知道爲什麼導出的JAR無法找到chromeDriver,儘管事實證明我已經證實它在JAR中?

感謝, 丹尼爾

+0

這似乎有點愚蠢的問,但你有「Chromedriver.exe」,但它被列爲小寫「chromedriver.exe」。你有沒有嘗試將它改爲小寫字母呢? –

+0

簡單的錯字,現在修復。 (在我的實際代碼中,它到處都是小寫) – DaniChan

+0

只是要清楚,這並不能解決您的實際問題嗎? –

回答

0

它在罐,但不能執行(同試圖運行從一個zip文件中的.exe),您可以運行它

+0

好的,我該怎麼做呢? – DaniChan

+0

請看這裏的例子:http://stackoverflow.com/questions/12531766/run-exe-file-from-inside-jar – Ittiel

+0

謝謝!這工作!我有一個小問題,爲了找到「chromedriver」的位置,但是當我把它放在src文件夾中時,這個問題就解決了。 再次,謝謝! – DaniChan

1

導出代碼之前將其解壓作爲罐子沒有chromedriver。 創建一個文件夾ChromeDriver。將您的chromedriver.exe放在這個文件夾中。 將ChromeDriver文件夾與您的jar放在一起。

而且不要忘記在代碼的系統屬性設置爲

System.setProperty("webdriver.chrome.driver", "ChromeDriver/chromedriver.exe"); 

請讓我知道這對你的作品。

+0

儘管我沒有看到爲什麼這種方式無效,但我真的希望能夠讓用戶只需下載一種類型的文件。這種方法應該可以工作,儘管'jar'不再是自給自足的。 – DaniChan

2

你必須在運行之前解壓縮它。 複製在src /資源/司機/ chromedriver.exe您的駕駛

現在只要您運行此代碼,它會創建一個新的文件夾「驅動程序」在任何你把你運行的JAR和複製你的驅動程序,您可以訪問。

ClassLoader classLoader = getClass().getClassLoader(); 
       URL resource = classLoader.getResource("resources/drivers/chromedriver.exe"); 
       File f = new File("Driver"); 
       if (!f.exists()) { 
        f.mkdirs(); 
       } 
       File chromeDriver = new File("Driver" + File.separator + "chromedriver.exe"); 
       if (!chromeDriver.exists()) { 
        chromeDriver.createNewFile(); 
        org.apache.commons.io.FileUtils.copyURLToFile(resource, chromeDriver); 
       } 
       System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath()); 
       driver = new ChromeDriver();