Selenium自動化測試如何處理 popup視窗?
這篇文章主要探討自動化測試過程中,如何處理popup視窗?
Popup視窗又分為,檔案儲存、檔案上傳、登入驗證、新視窗、Alert等,
這些都是測試過程中的一些常見的popup視窗,也是導致自動化測試失敗的主要原因之一,
這篇文章舉幾種常見的popup的視窗類型與情況,並且用簡單的範例程式說明如何處理這些popup視窗。
IE存檔視窗
原則上Selenium無法處理類似這樣的視窗。特別是針對IE。
因此,通常這樣的視窗我們可以處理的是在瀏覽器啟動前做一些設定,讓存檔相關的視窗不要出現。
要如何設定不要出現這樣的存檔詢問視窗呢? 舉FireFox為例,設定如下:
Firefox Tools > Options > Applications
也可以在Selenium程式啟動的時候做這樣的設定,範例如下:
[pastacode lang=”java” message=”Selenium Download Configuration” highlight=”” provider=”manual”]
FirefoxProfile profile = new FirefoxProfile();
String path = "C:\\Download_Folder\\";
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", path);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/ris, text/csv, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.download.manager.focusWhenStarting", false);
profile.setPreference("browser.download.useDownloadDir", true);
profile.setPreference("browser.helperApps.alwaysAsk.force", false);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.download.manager.closeWhenDone", true);
profile.setPreference("browser.download.manager.showAlertOnComplete", false);
profile.setPreference("browser.download.manager.useWindow", false);
profile.setPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
profile.setPreference("pdfjs.disabled", true);
driver = new FirefoxDriver(profile);
[/pastacode]
Http/Windows Authentication
這樣的帳號驗證視窗也不是 Selenium可以控制的範圍,因此也必須要瀏覽器啟動的時候就做好相關的設定。
如果是 IE 與Chrome 的設定,範例如下:
Internet Options > Security,將該網站的Security level設定為 Local intranet or trusted site
Security Settings 中,Automatic logon with current user name and password
FireFox如何處理這樣的Windows Authenticaion呢?
方法一:安裝一個FireFox AutoAuth plugin
https://addons.mozilla.org/en-US/firefox/addon/autoauth/
方法二:透過Selenium設定FireFox profile
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com");
driver = new FirefoxDriver(profile);
driver.Navigate().GoToUrl("http://user:pwd@google.com");
[/pastacode]
方法三:直接設定FireFox設定
在瀏覽器網址列輸入about:config
network.automatic-ntlm-auth.trusted-uris =”測試的網站”
signon.autologin.proxy = “true”
新視窗
這類的視窗是因為 JavaScript 中的 newWindow所產生,這樣的視窗就是 Selenium程式可以處理。
處理的方式可參考文章範例:http://www.qa-knowhow.com/?p=1843
JavaScript Alert
這樣的視窗也是 Selenium可以處理的。
處理的方式可以參考http://www.qa-knowhow.com/?p=1819
檔案上傳
比較簡單的方式是直接使用 sendKeys
//element is a WebElement of the upload button e.g.
WebElement element = driver.findElement(By.id("upload_btn")) element.sendKeys("C:\\pathToFile\\fileToUpload.jpg");
element
.sendKeys(Keys.ENTER);
.sendKeys(Keys.ENTER); 另外一個方式就是使用 AutoIT,這是另外一個自動化測試工具,用來自動化測試Window的視窗。 但是用這樣的工具,也會間接限制該自動化設僅能執行於Windows環境。