LoginSignup
25

More than 5 years have passed since last update.

Selenium2のWebDriverでIEを操作したときの問題と対応まとめ

Last updated at Posted at 2017-05-17

出向している現場のチームが画面上で手動でテストデータ作成していたのでSeleniumを導入しました。
担当しているシステムはIEでしか動かないのでIDEでテストケースは作らず
WebDriverを利用してjavaでケースを実装し、ブラウザ操作を行いました。
備忘録を兼ねて問題や使い方をまとめます。

環境

windows10 64bit
IE11
java 1.8.0_121
eclipse Neon.2 Release (4.6.2)
selenium 2.53.1

設定

1.eclipseで新規mavenプロジェクトを作成する
作成時に「シンプルなプロジェクトの作成」にチェックします

2.pom.xmlを修正

pom.xml抜粋
<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.53.1</version>
    </dependency>
</dependencies>

3.IEDriverServerをダウンロード

こちらから

※僕はWindows64bitを利用していますが
IEDriverServerは32bit版をダウンロードしました。
64版だとうまく動かないシーンがあります。後述の「問題と対応 2」をご覧ください。

4.Java実装へ
3で取得したDriverServierのパスをsetPropertyする必要があります。

IEDriver初期設定の書き方
System.setProperty("webdriver.ie.driver","C:\\任意の場所\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();


driverの使い方はこちらが参考になります

問題と対応

1.Selenium起動時エラー

Unexpected error launching Internet Explorer. 
Protected Mode must be set to the same value (enabled or disabled) for all zones.

IEブラウザの
インターネットオプション→セキュリティタブの設定
→すべてのゾーンで保護モードの設定を同じにする

2.sendKeysがめっちゃ遅い

ブラウザのテキストを入力するsendkeysが異常な遅さで使えません
詳細原因は追究してませんが、64bit版のIEDriverServerを利用するとそうなるようです。

3.クリック操作しても発火しない

IEだとたまに発生するようです。
以下の記述で回避できました。

WebElement element = driver.findElement(clickTarget);
element.sendKeys(Keys.CONTROL);
element.click();
もしくは
new Actions(driver).click(element).build().perform();

4.ファイルダウンロードポップアップが表示されると停止する

IEでファイルをダウンロードしたときに出るポップアップ(通知バー)
あれが出るとseleniumは停止します。
手動でぽちりしても動きません。
IE11だとブラウザから設定変更もできませんでした。
よって子スレッドを作ってダウンロード処理はそちらに任せて
親スレッドが本筋の処理を継続させるよう苦肉の対応を行っています。

Tips

ブラウザの子画面を操作したい

親画面がJSで子画面を生み出した場合
子画面にフォーカスして操作したいときのやりかた。

// 親ウィンドウ情報を保持
String currentHandle = driver.getWindowHandle();

// 子ウィンドウにフォーカスを切り替える
Set<String> windowHandles = driver.getWindowHandles();
  for (String handle : windowHandles) {
    if (!handle.equals(currentHandle)) {
      driver.switchTo().window(handle);
    }
}

// 子ウィンドウ処理が終わったら親に戻す
driver.switchTo().window(currentHandle);

ブラウザの処理が終わるまで待機したい

Seleniumで操作を命令した後、それが終わるまで待機したい。
例えば、検索のした後に、検索終わって一覧が出てから次の操作を行いたい。
以下のソースは、idがlistのエレメントが画面に表示されるまで待機する。
タイムアウトは10秒、超えると例外発生。

// 待機用オブジェクト
WebDriverWait wait = new WebDriverWait(driver, 10);

wait.until(
  ExpectedConditions.presenceOfElementLocated(
    By.id("list")
  )
);

ファイルをアップロードしたい

WebElement element = driver.findElement(By.xpath("//input[@type='file']"));
element.sendKeys("./ファイル.txt");

参考文献

https://donow.jp/skillup/?p=776#i-7
http://qiita.com/tukiyo3/items/44f5b64cf222d9da1b5b
http://bokuibi.blogspot.jp/2012/05/selenium-2.html
http://qiita.com/nkns165/items/53d1afc17023d9ae3ebd

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
25