2013-01-02 60 views
2

使用Selenium WebDriver作爲網頁自動化框架時,我有一個問題 - 如何配置Google Chrome和Internet Explorer以將下載的文件保存到特定的(非默認)文件夾,保存文件「窗口。文件下載的自定義瀏覽器首選項

Webdriver爲Mozilla Firefox瀏覽器提供FirefoxProfile,但其他瀏覽器又如何?

爲Firefox

例子:

 FirefoxProfile profile = new FirefoxProfile(); 

     profile.SetPreference("browser.helperApps.alwaysAsk.force", false); 

     profile.SetPreference("browser.download.folderList", 2); 

     profile.SetPreference("browser.download.dir", "\\Somedir\"); 

     profile.SetPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false); 

     profile.SetPreference("browser.download.useDownloadDir", true); 

     profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip, application/x-gzip"); 

回答

1

有了瀏覽器,是可以做到的,它只是不那麼容易和簡單,因爲Firefox的配置操縱。

由於webdriver的綁定暴露在「自定義」的能力和命令行參數添加的功能,你可以給它的任何命令行開關是Chrome的知道:

http://peter.sh/experiments/chromium-command-line-switches/

有了這個,我們可以爲Chrome加載配置文件,就像您使用Firefox一樣。

但是,WebDriver綁定不會公開選項以及Firefox配置文件。所以它必須手動完成。

首先,找出您的配置文件居住的地方:

在Chrome中訪問此URL。

chrome://version/ 

它會告訴你它正在加載什麼樣的配置文件(以及它正在使用什麼命令切換)。將配置文件路徑複製到資源管理器中並轉至該資源

它應該是,在默認情況下,使用Default配置文件目錄。在瀏覽器中進入關卡,所以你坐在User Data文件夾中。

下一步,創建一個新的配置文件供Selenium使用。打開Chrome,進入設置>用戶>添加新用戶。給它一個名字。

一旦創建,Chrome將爲該用戶打開一個新的Chrome窗口。下一步是強制Chrome,僅限該用戶,將下載保存在某個地方。

這可以通過兩種方式完成。在Chrome用戶界面中,轉到設置,然後更改下載目錄並確保其旁邊的複選框未被選中,或獲得更多廣告素材...

所有Chrome首選項都存儲在文件中,存儲在用戶目錄中。你應該已經打開瀏覽器窗口,坐在Chrome用戶文件夾中的User Data文件夾中。你應該希望看到它創建了一個新的配置文件(可能被稱爲Profile 1)。進入它。

現在查找名爲首選項(無擴展名)的文件。

用記事本編輯它(這是一個帶有JSON的文本文檔)。

查找下載部分,它看起來就像這樣:

"download": { 
    "directory_upgrade": true, 
    "extensions_to_open": "" 
}, 

添加在這個關鍵,把你想你的文件保存的路徑:

"default_directory": "PATH", 

確保你使用另一個反斜槓來轉義路徑中的任何斜線,與使用Visual Studio調試器時它以相同方式轉義。例如,C:\Bob\Jim\Downloads應輸入爲C:\\Bob\\Jim\\Downloads

保存文件。

現在你有一個配置文件,下載到某個地方。如何讓Chrome使用此配置文件?你告訴它在啓動時打開哪個配置文件。該命令行是:

--profile-directory="Profile 1" 

(更換Profile 1與不管它是所謂的User Data文件夾,如果它不叫那個)。

好的,我們可以告訴Chrome加載一個特定的配置文件,但我們如何告訴Selenium也這樣做?簡單!將其添加爲「附加命令行開關」。

var chromeOptions = new ChromeOptions(); 
chromeOptions.AddArgument(@"--profile-directory=""Profile 1"""); 

硒將於確保命令行開關向下傳遞到Chrome瀏覽器的照顧。

(注意:如果有人知道更簡單的解決方案,請告訴我!)。

至於IE,我已經在IE8和IE9上測試過了,它工作正常。 IE可以考慮默認下載位置的註冊表項。雖然我不能評論IE7或更低版​​本。

導航到,使用註冊表編輯器來(這是一個每個Windows用戶設置):

HKEY_CURRENT_USER \軟件\微軟\的Internet Explorer

添加名爲Download Directory一個字符串值。這是將是您想要下載的位置。沒有必要逃避路徑順便說一句。

只需確保您在Windows下登錄的用戶已設置此值,並且不再需要其他設置。

0

請嘗試下面的代碼鉻。即使我正在爲IE瀏覽器尋找類似的選項。

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver"); 
String downloadFilepath = "/path/to/download"; 
HashMap<String, Object> chromePrefs = new HashMap<String, Object>(); 
chromePrefs.put("profile.default_content_settings.popups", 0); 
chromePrefs.put("download.default_directory", downloadFilepath); 
ChromeOptions options = new ChromeOptions(); 
HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>(); 
options.setExperimentalOptions("prefs", chromePrefs); 
options.addArguments("--test-type"); 
DesiredCapabilities cap = DesiredCapabilities.chrome(); 
cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap); 
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); 
cap.setCapability(ChromeOptions.CAPABILITY, options); 
WebDriver driver = new ChromeDriver(cap);