tsuttieです(*'▽')
今回はSelenium2を使ってのダウンロード処理についてお話していきます。
1. Selenium2を使ってみて
Webアプリのテスト自動化を目的としてSelenium2を使ったので詰まった点を数回に分けてまとめて行きたいと思います。
2. 使用したSelenium
・Selenium IDE
・Selenium Webdriver (Java 3.5.0)
※導入方法についてはわかりやすくまとめていらっしゃる方が多くおりますので、そのあたりのお話は省きます。
3. 【本題】Selenium2にダウンロード処理をさせてみよう
今回は前回の予告通りということでSelenium2にDownload処理をさせてみたいと思います。
※環境はFirefox(54.0.1)64ビットです。
まず普通にダウンロード処理を命令するとどういった問題があるのかというところからご説明させていただきます。(^^ゞ
ダウンロードボタンを押してからダウンロードが行われるまでは簡単に以下のような手順を踏むかと思います。
ダウンロード処理をするまでの手順
- ファイルをダウンロードするリンクを選択する
- ブラウザよりダイアログが発生する
- ダイアログよりダウンロード場所を指定する
- ダウンロードを許可
- 無事ダウンロード開始・終了
大まかに説明するとこんな感じですよね!
と、そこでここで問題が発生します。
ダイアログ・・・
Selenium2では現状、ダイアログに対して細かい操作を指定できません。
そこで、このダイアログを発生しないようにしなければならないと・・・(・_・;)
(発生した時点でその後の処理は全く操作できなくなってしまいます)
とりあえずFirefoxブラウザを開き
[オプション]-[一般]-[ダウンロード]より
ダウンロード先を指定しましたが、そんな簡単なはずもなく・・・
そもそもwebドライバーを使っていますので、プログラムから開いた場合と普通に開いた時とで設定が異なってしまう状況でした。
そうなればJavaでwebドライバを準備しているときについでに設定してしまおう!
ということですね。
【参考】Selenium 2.x Web Driverでファイルをダウンロードをする
以上のURLを参考に書き進めていくと
以下の処理で解決することが出来ました。
package ~;
import java.io.IOException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
public class Download2017 {
private WebDriver driver;
@Before
public void setUp() throws Exception {
FirefoxProfile profile = new FirefoxProfile();
//1.ダウンロード場所を指定する0:デスクトップ 1:ダウンロードフォルダ 2:ダウンロードに指定された最後のフォルダ
profile.setPreference("browser.download.folderList", 0);
//2.ダウンロード先が指定してあればそれを使う
profile.setPreference("browser.download.useDownloadDir", true);
//3.zipファイルは有無を言わさずにダウンロードを行う
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip");
//4.webdriverの設定(設定したprofileを読み込む)
System.setProperty("webdriver.gecko.driver", "./driver/geckodriver.exe");
driver = new FirefoxDriver(profile);
}
@After
public void tearDown() throws Exception {
driver.quit();
}
@Test
public void test() throws InterruptedException {
try {
driver.get("URL");
driver.findElement(By.id("ダウンロード")).click();
//ダウンロードリンクをクリック
}catch(IOException e){
System.out.println(e);
}
}
}
簡単にまとめると
1.ダウンロード場所を指定。
2.ダウンロード先を固定
3.ダイアログを出さないように設定
4.その設定をしたprofileを読み込む
といった手順となりました。
おそらく場所指定の方法とかもう少しいい書き方があるのかも・・・
とは思いますが、ひとまずダウンロードはこの方法で何とかなりそうです(^_^)/
4. まとめ
Firefoxのバージョンがどうだとか、Driverのバージョンがどうとか
エラーもかなり出たので正直そこそこ苦戦しました。
現状はダウンロードすることはできるけどFirefoxのバージョンが上がるとまた対応できなくなるかも・・・とかなり怖い妄想がはかどりました。
次回はIEで接続してみようかと思います
よろしくお願いします( ˘•ω•˘ )!!