目的:下载链接的时候,通常需要人为地设定下载文件保存的路径,这样就无法实现全自动化执行下载过程。
被测试网页的网址:http://ftp.mozilla.org/pub/firefox/releases/35.0b8/win32/zh-CN/
实例代码:
package cn.om.webdriverapi; import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxProfile; import org.testng.annotations.AfterMethod; public class TestAutoFileDownload { public static String downloadFilePath = "C:\\Users\\oumin1\\下载"; WebDriver driver; String baseURL; @Test public void testFileDownload() { driver=new FirefoxDriver(FirefoxDriverProfile()); driver.get(baseURL); //单击包含“Stub”关键字的下载链接 driver.findElement(By.partialLinkText("Stub")).click(); //设定10秒中的延迟,让程序下载完成。如果网络下载很慢,可以根据预估的下载完成时间 //设定暂停时间 try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static FirefoxProfile FirefoxDriverProfile() { // 声明一个profile对象 FirefoxProfile profile = new FirefoxProfile(); // 设置FireFox的browser.download.folderList属性为2 // 如果没有进行显示设定,则默认为1.表示下载文件保存在“下载”文件夹中。 // 如果设置为0,表示保存在用户的桌面。 // 设置为2,表示保存到用户指定的文件夹中 profile.setPreference("browser.download.folderList", 2); // browser.download.manager.showWhenStarting的属性默认值为true // 设置为true,则用户启动下载的时候显示Firefox浏览器的文件下载窗口 // 设置为false,则用户启动下载的时候不显示Firefox浏览器的文件下载窗口 profile.setPreference("browser.download.manager.showWhenStarting", false); // browser.download.dir设定下载文件保存的目录 profile.setPreference("browser.download.dir", downloadFilePath); // browser.helperApps.neverAsk.openFile表示直接打开下载文件,不显示确认框 // 默认值为空字符串,下列代码设定了多重文件的MIME类型 // 例如,application/exe表示.exe类型的文件,application/excel表示Excel类型的文件 profile.setPreference("browser.helperApps.neverAsk.openFile", "application/octet-streamapplicaton/exe,text/csv,application/pdf,application/x-msexcel,application/excel,application/x-excel,application/excel,application/x-excel,application/excel,application/vnd.ms-excel,application/x-excel,application/x-msexcel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml,application/excel,application/x-msdownload"); // browser.helperApps.neverAsk.saveToDisk表示下载文件师是否直接保存到磁盘 profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-streamapplicaton/exe,text/csv,application/pdf,application/x-msexcel,application/excel,application/x-excel,application/excel,application/x-excel,application/excel,application/vnd.ms-excel,application/x-excel,application/x-msexcel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml,application/excel,text/x-c,application/x-msdownload"); // browser.helperApps.alwaysAsk.force对于未知的MIME类型文件会弹出窗口让用户处理 // 默认值为true。设置为false表示不会记录打开未知MIME类型文件的方式。 profile.setPreference("browser.helperApps.alwaysAsk.force", false); // 下载.exe文件弹出警告,默认值是true,设定为false则不会弹出警告框 profile.setPreference("browser.download.manager.alertOnEXEOpen", false); // browser.download.manager.focusWhenStarting设定下载狂在下载时会获取焦点 // 默认为true。设为false表示不获取焦点 profile.setPreference("browser.download.manager.focusWhenStarting", false); // borwser.download.manager.useWindow表示下载是否显示下载框 // 默认为true。设置为false会把下载框隐藏 profile.setPreference("browser.download.manager.useWindow", false); // browser.download.manager.showAlertOnComplete设定下载文件结束后是否显示下载完成提示框 // 默认值为true,设定为false表示不显示。 profile.setPreference("browser.download.manager.showAlertOnComplete", false); // browser.download.manager.closeWhenDone设定下载结束后是否自动关闭下载框 // 默认为true,设置为false表示不关闭下载管理器 profile.setPreference("browser.download.manager.closeWhenDone", false); return profile; } @BeforeMethod public void beforeMethod() { baseURL = "http://ftp.mozilla.org/pub/firefox/releases/35.0b8/win32/zh-CN/"; System.setProperty("webdriver.firefox.bin", "D:/Mozilla Firefox/firefox.exe"); } @AfterMethod public void afterMethod() { driver.quit(); } }在自动化测试过程中,经常会遇到设置了下载文件的MIME类型,但是测试过程执行的时候依旧会显示下载弹出窗,并且需要人为介入处理。产生上述情况主要是因为网站服务器可能给一些类型文件定义为了其他的MIME类型。因此我们可以借助一些浏览器插件,如FirePath中的网络功能,可以从http信息头中找到文件的MIME类型。