この記事は12/21 クローラー/Web スクレイピングの記事です。
最近、自社システムのシナリオテストの実施方法周りの調査をやっているのですが、
な手法を調べており、selenese-runnerというツールと Selenium が提供している Selenium Hub というツールを利用したらいいんじゃないか、という結論になりました。
この方法なら専門的な技能がなるべく少なくて済むんじゃないか。
と思っている方法を紹介します。
Firefox のアドオンとして配布されています。
ブラウザでの操作をマクロとして記録する機能があります。
また、IDE 上で記録したマクロを編集したりアサーションを追記したりできます。
補完とドキュメントが付いているので、Selenium の機能を熟知していなくても、補完で命名を補いってドキュメントで知識を補いながら書けます。
IDE からステップ実行もできるので、1手順ずつ動作確認していくことも可能です。
Selenium IDE の詳しい使い方については色んな方が記事書いてくださっていますので割愛します。
— 5 分でわかる Selenium IDE の使い方 – Qiita
— これだけはおさえておきたい!Selenium IDE のコマンド – Qiita
— Selenium IDE で Web ページのテストを自動化しよう!|社員ブログ|株式会社 Qript
アサーションを書くのはややプログラマ的な視点が必要になるかもしれませんが、
CSS セレクタと HTML タグが分かればある程度のテストなら書けるので、
フロントのマークアッパーとかも十分戦力として計上可能な範囲の専門性だと思います。
エクスポート機能を使わずにファイルとして保存すると、HTML ファイル(selenese という形式らしい)が吐き出されます。
selenese という形式は結構冗長な HTML です。かなしい。
ただし、ここで重要なのが 可逆性があること です。
selenese の形式を崩さなければ、 テキストエディタ等で編集した後でも再度 Selenium IDE で開き直すことが可能 です。
エクスポート機能を利用すると、様々な形式のコードへエクスポートが可能です。
ただし、selenese という形式以外にエクスポートすると、Selenium IDE で開けなくなります。非可逆です。
で、selenese という形式は結構冗長な HTML です。かなしい。
可逆性を失うと「エディタが扱えて selenese 形式の HTML が理解できる」エンジニアが必要になってしまうと思います。
でないとメンテナンスできなくなっちゃうので、できれば IDE で何度でも編集できる形にしておきたい。
ということでエクスポートは selenese 形式一択だと現状考えています。
お待ちかねの CLI 化+ヘッドレス化です。
selenese-runner自体の使い方についてはご本人が公開されているスライドが参考になると思います。
この便利ツールを使用して、selenese 形式の HTML をコマンドラインから実行できます。
selenese-runner 単体をホスト側実行するとブラウザが起動し、HTML の内容が実行されます。
どうでしょう。いい感じです。
cron 等で定期実行したり、CI を回したりするには、GUI のない Linux サーバで実行する必要があると思います。
ということで、その動作環境も作ってみました。
動作させると、
こんな感じです。いかがでしょうか。
これなら GUI 不要なので、cron でも CI でも exec でもいい感じにもらえばいいと思います。
![](https://g.gravizo.com/g? %20digraph%20G%20%7B%0A%20%20%20graph%20%5B%0A%20%20%20%20%20rankdir%20%3D%20LR%0A%20%20%20%5D%3B%0A%0A%20%20%20selenese%3B%0A%20%20%20hub%20%5Blabel%3D%22selenium%2Fhub%22%5D%3B%0A%20%20%20chrome%20%5Blabel%3D%22selenium%2Fnode-chrome%22%5D%3B%0A%20%20%20firefox%20%5Blabel%3D%22selenium%2Fnode-firefox%22%5D%3B%0A%0A%20%20%20selenese%20-%3E%20hub%20%5Blabel%3D%22%2Fwd%2Fhub%22%5D%3B%0A%20%20%20chrome%20-%3E%20hub%20%5Blabel%3D%22Connect%22%5D%3B%0A%20%20%20firefox%20-%3E%20hub%20%5Blabel%3D%22Connect%22%5D%3B%0A%20%20%20hub%20-%3E%20chrome%20%5Blabel%3D%22Execute%22%5D%3B%0A%20%20%20hub%20-%3E%20firefox%20%5Blabel%3D%22Execute%22%5D%3B%0A%20%7D%0A )
こんな感じです。
設定ファイルの中で selenese コンテナはドライバをremote
、remote-url
に hub コンテナの URL を指定してあります。
その指定をすると selenese-runner 側が Selenium hub にテスト実行依頼を投げます。
依頼を受け取った hub は、接続済みの chrome か firefox を起動しテストを実行します。
Selenium hub 使ったことなかったので理解するまでが難しかったですが、実際に動かしてみたら簡単に理解できました。
Selenium hub 自体については公式リポジトリとこちらの記事が参考になりました。
— GitHub – SeleniumHQ/docker-selenium: Docker images for Selenium Standalone Server
— » Selenium Grid で複数の実機ブラウザで自動テスト TECHSCORE BLOG
Selenium はデフォルトでは日本語などのマルチバイト文字をサポートしていません。
なのでスクショを撮る時に □□□ みたいな感じに化けるのですが、せっかくスクショ撮るようにしたなら日本語対応したいな、ということでしておきました。
selenium/hub
側に日本語対応を入れるのかと思っていましたが、node-chrome
とnode-firefox
コンテナの方に入れる必要がありました。
詳しくは Ubuntu のドキュメントと公開したリポジトリの Dockerfile を御覧ください。
ちなみに、中国語のタグの PR に対して、
however not sure if those containers could accept such locale support for general cases
と回答しているので公式のタグとしては登場しなさそうです。
これをベースに自分たちなりのアレンジで運用してもらえれば、
スクレイピングもシナリオテストもいい感じに回っていくかな、と思います。