7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Selenium2でダウンロード処理をさせてみる

Posted at

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ビットです。

 まず普通にダウンロード処理を命令するとどういった問題があるのかというところからご説明させていただきます。(^^ゞ

ダウンロードボタンを押してからダウンロードが行われるまでは簡単に以下のような手順を踏むかと思います。

ダウンロード処理をするまでの手順

  1. ファイルをダウンロードするリンクを選択する
  2. ブラウザよりダイアログが発生する
  3. ダイアログよりダウンロード場所を指定する
  4. ダウンロードを許可
  5. 無事ダウンロード開始・終了

大まかに説明するとこんな感じですよね!

と、そこでここで問題が発生します。

こいつです。
download_test.PNG

ダイアログ・・・
Selenium2では現状、ダイアログに対して細かい操作を指定できません。
そこで、このダイアログを発生しないようにしなければならないと・・・(・_・;)
(発生した時点でその後の処理は全く操作できなくなってしまいます)

とりあえずFirefoxブラウザを開き
[オプション]-[一般]-[ダウンロード]より
ダウンロード先を指定しましたが、そんな簡単なはずもなく・・・
そもそもwebドライバーを使っていますので、プログラムから開いた場合と普通に開いた時とで設定が異なってしまう状況でした。

そうなればJavaでwebドライバを準備しているときについでに設定してしまおう!
ということですね。
【参考】Selenium 2.x Web Driverでファイルをダウンロードをする
以上のURLを参考に書き進めていくと

以下の処理で解決することが出来ました。

Download2017.java

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のバージョンが上がるとまた対応できなくなるかも・・・とかなり怖い妄想がはかどりました。:skull:

次回はIEで接続してみようかと思います
よろしくお願いします( ˘•ω•˘ )!!

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?