一:主要内容
- 下载效果展示
- 代码内容展示
- saveToDisk不生效说明,即文件没有下载下来解决办法
二:展示效果
1.下载效果展示
用selenium3无人工干预的自动下载该文件到指定路径下,如:D:\downloadFiles
2.代码展示
1 package cn.gloryroad; 2 3 import org.openqa.selenium.*; 4 import org.openqa.selenium.firefox.FirefoxDriver; 5 import org.openqa.selenium.firefox.FirefoxOptions; 6 import org.openqa.selenium.firefox.FirefoxProfile; 7 import org.testng.annotations.AfterMethod; 8 import org.testng.annotations.BeforeMethod; 9 import org.testng.annotations.Test; 10 11 public class TestDemo { 12 //设定下载文件存储的文件路径 13 public static String downloadFilePath = "D:\\downloadFiles"; 14 WebDriver driver; 15 String baseUrl; 16 JavascriptExecutor js; 17 18 @BeforeMethod 19 public void beforeMethod() { 20 baseUrl="http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/35.0b8/win32/zh-CN/"; 21 } 22 23 @AfterMethod 24 public void afterMethod() { 25 driver.quit(); 26 } 27 28 29 @Test 30 public void testdataPicker() throws Exception { 31 System.setProperty("webdriver.firefox.bin","D:\\firefox\\firefox.exe"); 32 driver = new FirefoxDriver(firefoxDriverOptions()); 33 34 driver.get(baseUrl); 35 //单击包含“Stub”关键字的下载链接 36 driver.findElement(By.partialLinkText("Stub")).click(); 37 //设定10秒钟的延迟,让程序下载完成。如果网络下载很慢,可以根据预估的下载完成时间, 38 //设定暂停时间 39 try{ 40 Thread.sleep(10000); 41 }catch(Exception e){ 42 e.printStackTrace(); 43 } 44 } 45 46 public static FirefoxOptions firefoxDriverOptions() throws Exception { 47 FirefoxOptions options = new FirefoxOptions(); 48 //声明一个 profile 对象 49 FirefoxProfile profile = new FirefoxProfile(); 50 //设置 Firefox 的browser.download.folderList属性为 2 51 //如果没有进行显示设定,则使用默认值 1,表示下载文件保存在“下载”文件夹 52 //设定为 0,则下载文件会被保存在用户的桌面上 53 //设定为 2,则下载文件会被保存在指定的文件夹下 54 profile.setPreference("browser.download.folderList",2); 55 //browser.download.manager.showWhenStarting的属性默认值为 true 56 //设定为 true,则在用户启动下载的时候显示 Firefox 浏览器的文件下载窗口 57 //设定为 false,则在用户启动下载的时候不显示 Firefox 浏览器的文件下载窗口 58 profile.setPreference("browser.download.manager.showWhenStarting",false); 59 Thread.sleep(5000); 60 //browser.download.dir设定下载文件保存的目录 61 profile.setPreference("browser.download.dir",downloadFilePath); 62 //browser.helperApps.neverAsk.openFile表示直接打开下载文件,不显示确认框 63 //默认值为空字符串,下行代码行设定了多种文件的 MIME类型,例如,application/x-msdownload 64 //表示.exe类型的文件,application/excel表示 Excel 类型的文件 65 profile.setPreference("browser.helperApps.neverAsk.openFile", 66 "application/octet-stream,application/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"); 67 //browser.helperApps.neverAsk.saveToDisk表示下载文件是否直接保存到磁盘 68 //默认值为空字符串,下行代码行设定了多种文件的 MIME类型,例如,application/x-msdownload 69 //表示.exe类型的文件,application/excel表示 Excel 类型的文件 70 profile.setPreference("browser.helperApps.neverAsk.saveToDisk", 71 "application/octet-stream,application/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"); 72 // browser.helperApps.alwaysAsk.force对于未知的 MIME 类型文件会弹出窗口 73 // 让用户处理,默认值为true,设定为false表示不会记录打开未知 MIME 类型 74 // 文件的方式 75 profile.setPreference("browser.helperApps.alwaysAsk.force",false); 76 //下载.exe文件弹出警告,默认值是 true,设定为false 则不会弹出警告框 77 profile.setPreference("browser.download.manager.alertOnEXEOpen",false); 78 // browser.download.manager.focusWhenStarting设定下载框在下载时会获取焦点 79 // 默认值为 true,设定为 false 表示不获取焦点 80 profile.setPreference("browser.download.manager.focusWhenStarting",false); 81 // browser.download.manager.useWindow设定下载是否显示下载框,默认值为true 82 // 设定为 false 会把下载框进行隐藏 83 profile.setPreference("browser.download.manager.useWindow",false); 84 // browser.download.manager.showAlertOnComplete设定下载文件结束后是否显示下载 85 // 完成提示框,默认值为 true,设定为 false 表示下载完成后不显示下载完成提示框 86 profile.setPreference("browser.download.manager.showAlertOnComplete",false); 87 // browser.download.manager.closeWhenDone设定下载结束后是否自动关闭下载框 88 // 默认值为true,设定为false 表示不关闭下载管理器 89 profile.setPreference("browser.download.manager.closeWhenDone",false); 90 91 options.setProfile(profile); 92 return options; 93 } 94 95 }
3.如果运行代码后发现你的文件弹窗还是弹出来了,文件并没有下载保存到指定的文件路径下,那么请检查下你的文件类型是否包含在上诉列出的文件类型之内,我之前遇到的问题是我要下载exe文件,然后给browser.helperApps.neverAsk.openFile和browser.helperApps.neverAsk.saveToDisk都加入了application/exe类型,但是运行代码后发现,保存文件的弹窗照样还是打开了,文件并没有被下载下来。
这个时候你就可以抓包或者通过浏览器的f12工具看下你下载文件的那个请求的响应数据的Content-Type是什么类型的,加入进去就好,如我上面的exe文件,用f12工具查看它的content-type类型为:application/x-msdownload
然后我在我的代码里设置的browser.helperApps.neverAsk.openFile和browser.helperApps.neverAsk.saveToDisk里加入该项application/x-msdownload即可,文件就能被下载成功了,其他文件类型按照同样的方法也可以解决。