9
2

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 2018

Day 6

JSDOMをSeleniumから使ってみよう

Last updated at Posted at 2018-12-06

この記事は Selenium/Appium Advent Calendar 2018 の6日目の記事です。

こんにちは!
速いのが良いですか!!
速い方が都合が良いんですか!!!
遅いのは...私たちなのかもしれません...

Seleniumが遅いならJSDOMを使えばいいじゃない。

JSDOM

https://github.com/jsdom/jsdom
ガシャーン ガシャーン
DOM描画をしないヘッドレスブラウザーだよ
JavaScriptをV8エンジンでこなしてくれるクソ速いやつだよ

Seleniumじゃないじゃん!

はい。
Seleniumの話をします。

JSDOMにWebDriver APIを提供するラッパー「taxi-rank」

https://github.com/ForbesLindesay/taxi-rank
JSDOMをSeleniumから使えるようになります。これでクソ速くなるよ。
Awesome Selenium にも載ってない知る人ぞ知るやつだよ。

アッアッ 何か「意味無ぇー」とか言ってる声が一部JSerから聞こえてくるようなッ気がッ
そんなことはッたぶんないッ

taxi-rankのうれしいところ

JS以外の言語からJSDOMを使える

JSからJSDOMを直接扱うよりは当然オーバーヘッドが生じますが、他のPythonなどのクライアントライブラリーからJSDOMの高速処理の恩恵にあずかれるようになります。

画面描画のあるブラウザーとの使い分け運用が容易になる

まずJSDOMで試して、だめな場合だけChromeを使って...みたいな使い分けを、ブラウザー自動化コードとしては同じAPIで実現できるようになります。
うまくはまれば、WebDriverベースでも実行時間をかなり短くできるでしょう。

taxi-rankやってみよう

npmでさくっとインストールしましょう。

$ sudo npm install taxi-rank -g

コマンド taxi-rank を実行すると、WebDriverのコマンドを待ち受けるサーバーが起動します。
既定の待ち受けポートは 9516/tcp です。

$ taxi-rank

listening on http://localhost:9516

この辺をよきにはからってくれるTaxiRankDriverみたいな感じのクライアントライブラリーは、現時点ではtaxi-rankの開発者が別に作っている Cabbie というラッパー以外にありません。今回はかんたんな検証のため、RemoteWebDriverで直接接続して操作します。

driver = webdriver.Remote(command_executor='http://localhost:9516')
driver.get('http://example.selenium.jp/reserveApp/')
# ... ... ...
driver.quit()

ベンチマーク

日本Seleniumユーザーコミュニティの提供するサンプルページ上で基本的なAPIを100回実行して、1回あたりの平均値を取得するだけの簡易ベンチマークをやりました。
https://github.com/hiroshitoda/WebDriverBenchmark.py

実行環境は手元のMacBook Pro実機で、スペックは次の通りです。

CPU Intel Core i5 2.3GHz
メモリー 16Gbytes
OS macOS Mojave 10.14.1
Python 3.7.0

結果は次の通りでした。
超速い、そらそうよとしか言いようがないですが...

ChromeDriver FirefoxDriver taxi-rank
webdriver.get 65ms 160ms 15ms
find_element_by_id 7ms 7ms 2ms
find_element_by_css_selector 5ms 4ms 2ms
clear 47ms 78ms 2ms
send_keys 47ms 68ms 2ms
click 31ms 212ms 4ms

taxi-rankのはまりどころ

実戦投入と評価はこれからですが、大事なことをひとつだけ書いておきます。

スクリーンショットを取得できません

そらそうよ。

今回はここまで

次回は...誰かー! 誰か来てくれーーー!!!
Selenium/Appium Advent Calendar 2018はまだまだ君の挑戦を待っているぜ!

9
2
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
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?