2015-05-05 48 views
4

許多來源提到從類路徑加載ChromeDriver二進制文件,但是如果二進制文件不在類路徑根目錄下,我還沒有弄清楚如何去做。如何從類路徑加載ChromeDriver二進制文件?

要指定二進制文件的路徑,似乎必須設置系統屬性「webdriver.chrome.driver」。首先我想:

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

但我得到了一個錯誤,現在看來,這是尋找位置"C:\<working directory of my application process>\drivers\Chrome\chromedriver.exe"司機。這裏的工作目錄實際上是我的源代碼存儲的目錄。

然後我嘗試:

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

但是同樣的事情發生了 - 這一次是在尋找"C:\drivers\Chrome\chromedriver.exe"

如何使用「webdriver.chrome.driver」屬性或任何其他配置方式讓ChromeDriver在類路徑中查找ChromeDriver二進制文件?

回答

4

最終,我發現ChromeDriver不支持對其二進制的類路徑相對訪問。但是,可以將類路徑相對字符串轉換爲系統路徑,然後直接加載它,繞過系統屬性。

URL url = this.getClass().getClassLoader().getResource(classpathRelativeLocation); 
File file = new File(url.getFile()); // Strangely, URL.getFile does not return a File 
ChromeDriverService.Builder bldr = (new ChromeDriverService.Builder()) 
            .usingDriverExecutable(file) 
            .usingAnyFreePort(); 
ChromeDriver driver = new ChromeDriver(bldr.build()); 
+1

不幸的是,ChromeDriver(ChromeDriverService服務)構造函數在Selenium3中已被棄用(截至今天,它仍然有效,誰知道它有多長......)。考慮這個例子的「正確」用法:https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/chrome/ChromeDriver.html – Siaynoq

-1

在我看來,它應該具有以下完整路徑工作:

System.SetProperty("webdriver.chrome.driver", @"D:/drivers/Chrome/chromedriver.exe"); 
WebDriver driver = new ChromeDriver();    
driver.get("http://www.google.com"); 

我希望這可以幫助你!

+0

這是一個系統路徑,而不是一個類路徑。 – Kidburla