version: Selenium WebDriver 2.53.0、JUnit4
Seleniumでダウンロードダイアログを出さずに強制的にファイルダウンロードして、その後ファイルを検証したい。
ダウンロードする場所は、時間が経ったら消えてくれるように、Tempディレクトリ以下にする。
また、ダウンロードした後にファイルを簡単に取得できるようにTempディレクトリの下にSelenium起動時刻がついたディレクトリを作成して、その直下にダウンロードする。
WebDriver driver;
Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"), "seleniumtest", Long.toString(System.currentTimeMillis()));
@SneakyThrows(IOException.class)
@Before
public void setup() {
Files.createDirectories(tempDir);
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", tempDir.toString());
profile.setPreference("browser.download.useDownloadDir", true);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/html, text/plain, application/vnd.ms-excel, text/csv, application/zip, text/comma-separated-values, application/octet-stream");
driver = new FirefoxDriver(profile);
}
@SneakyThrows(InterruptedException.class)
private void download() {
driver.findElement(By.id("btnDownload")).click();
TimeUnit.SECONDS.sleep(3);
}
@Test
public void ダウンロード() {
// ダウンロードページまでの遷移は略
download();
File file = Arrays.stream(tempDir.toFile().listFiles())
.sorted(Comparator.comparing(File::lastModified).reversed())
.findFirst()
.get();
assertEquals("expectedFileName", file.getName());
}}