13
12

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.

Selenium/AppiumAdvent Calendar 2015

Day 2

Seleniumの薄っすい話2:俺とEdgeDriver

Last updated at Posted at 2015-12-01

この記事はSelenium/Appium Advent Calendar 2015の2日目の記事です。

薄っすい記事も2日目です!こんにちは!
今度導入予定の社内システムが動作保証環境 Windows 10 って言われてちびりそうです!!

今年7月にリリースされた Windows 10 、Seleniumな人たちが気になっていたのは、新ブラウザー「Edge」ですよね!
Seleniumではいつ扱えるようになるんだろう? とやきもきして待つ間も無く、同じく今年7月リリースの2.47でEdgeDriverが追加されました。早い!

リリース直後くらいに、日本SeleniumユーザーコミュニティのフォーラムにEdgeDriverの概況を流したのですが、そのときの内容をフォローする形でこの記事を書きます。
日本Seleniumユーザーコミュニティに入ると、こういう最新情報の共有ができますよ!(急な宣伝)

Edgeってなに?

Edgeは、Microsoft製の最新ブラウザーです。Windows 10 の標準Webブラウザーになっています。
WebDriver APIに対応しています。これは後付けされた対応ではなく、当初から対応することを見込んで開発されたものです。

Microsoftは既にMSDNにもWebDriverのページを用意しています。WebDriver APIに対応したプロプライエタリなブラウザーの良い事例として、うまく育ってほしいと思います。

EdgeDriverやってみよう

SeleniumでGoogle Chrome/Chromiumを操作するときに、ChromeDriverサーバーを仲介役として併用しますね。
Edgeを操作するときも同様に、MicrosoftWebDriverサーバーを仲介役として併用する必要があります。

MicrosoftWebDriverサーバーは、MicrosoftのWebDriver紹介ページ経由で入手しましょう。歴代のバージョンへのリンクが掲載されています。
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
古いリリースバージョンもダウンロード可能ですが、もはや役には立たないので、Release 14393以降の最新の MicrosoftWebDriver.exe をダウンロードして、適当な場所に配置しましょう。EdgeDriverを利用するときは、配置した場所にPATHを通すか、ファイルパスをシステムプロパティ webdriver.edge.driver に設定する必要があります。

EdgeDriverの公式バインディングは現状JavaとC#とJavaScriptのみ対応、と書かれていることが多いのですが、RubyPythonは既に対応してるっぽいファイルがありますよね…
実際は他の言語でも既に使えるのかどうか、この辺は私は未検証です。
EdgeDriverを利用するときのインスタンス生成コードは次のような感じです。

  • Java

    WebDriver driver = new EdgeDriver();
    
  • C#

    IWebDriver driver = new EdgeDriver();
    

RemoteWebDriver経由で利用することもできます。Capabilitiesに設定するブラウザー名称はMicrosoftEdgeです。

Selenium Gridにも対応しています。リリース当初はWebコンソールでIEのアイコンが代わりに表示されてしまうというなんだか過渡期な感じでしたが、その後 改善したはずです。

EdgeDriverの良いところ

すげー速い

試しに動かしてみると、どうも体感的に他のブラウザーより軽快に動く気がします。
「PhantomJSより速い!」なんて言ってる人もTwitter上で見かけたので、試しにJavaバインディングでベンチマークを取ってみました。
日本Seleniumユーザーコミュニティの提供するサンプルページ上で基本的なAPIを100回実行して、1回あたりの平均値を取得するだけの簡易ベンチマークです。
https://github.com/hiroshitoda/WebDriverBenchmark

実行環境のスペックは次の通りで、クラウドではなく手元の実機を使いました。

CPU Intel Xeon E3-1220 3.10GHz
メモリー 16Gbytes
OS Windows 10 Pro 64bit
JDK 1.8.0_66-b18

結果は次の通りでした。

ChromeDriver FirefoxDriver via GeckoDriver PhantomJSDriver EdgeDriver
WebDriver.get 253ms (検証中) 43ms 85ms
WebDriver.findElement(By.Id) 8ms (検証中) 5ms 2ms
WebDriver.findElement(By.cssSelector) 7ms (検証中) 5ms 14ms
WebElement.clear 21ms (検証中) 21ms 2ms
WebElement.sendKeys 33ms (検証中) 31ms 9ms
WebElement.click 30ms (検証中) 39ms 2ms
TakeScreenshot.getScreenshotAs 110ms (検証中) 41ms 46ms

「PhantomJSより速い!」というのはあながち間違いでもない感じですね。
特にWebElementの操作が異常に速い。(実はここは非同期処理でしたーとかだとだいぶ笑えませんが)
体感を裏付ける結果になったと思います。

問題点・微妙な点

未だにマルチバイト文字列のsendKeysが通らない(2016年に解消)

リリース後の検証時、真っ先に気になったところだったのですが、本記事の記載時点でも解決していません。 sendKeysで、Unicodeのマルチバイト領域の文字を引数に渡すと死にます。 和文がダメならまだ話は分かりますが、ウムラウトとか非ASCIIのラテン文字も通らないので世界的にどうにもなってない人の方が多いはずです。みんなもっと怒って!!

MicrosoftWebDriver.exe を2016年(8月?)のRelease 14393に更新した後 検証した結果、マルチバイト文字列のsendKeysが動くようになっていることが確認できました。よかったね!!

Selenium IDEのWebDriver-Backedでほとんど動かない

ブラウザー名をMicrosoftEdgeに設定すればopencloseくらいはできるようになるのですが、

capture.png

今のところ他のコマンドが全然動かないので実用になりません。
デバッグのやり方がよくわかっていなくて、いまいち追いかけ切れていません。次のようなエラーログしか出ないんですよね…

[error] com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to org.openqa.selenium.WebElement

もうクロスブラウザーチェックでSelenium IDE使うのやめよう!(ニコニコ)

薄っすい話なので以上です。

次回も薄っすいの書きます!
Selenium/Appium Advent Calendar 2015はまだまだ薄っすいのも濃ゆいのも募集中です!

13
12
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
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?