はじめに
Heliumはブラウザを自動操作するためのPythonのライブラリで、直観的にコードを書くことができます。
従来は、Seleniumを使ってたと思いますが、HeliumはSeleniumのラッパーなのでSeleniumの関数もそのまま使えます。
ChromeとFirefoxに対応と書かれていたのですが、会社ではEdgeが基準なのでEdgeでも使えないかと色々試したら、意外と簡単に使えたのでご紹介したいと思います。
これは使える!と思ったので、実際の開発業務で機能試験で使ってみました。
なにができるの?
- Heliumからブラウザを起動して、人が操作するのと同じようなことができます。
- ユーザとパスワードを入力してログインボタンを押す。
- 毎日同じようなリストを出力する。
- 機能試験、リグレッション試験。何度でも同じような試験が実施できます。Seleniumより少ない量で試験コードが書けますので何度も試験を実施する場合、効果は大きいです。
まずは設定
ライブラリのインストール
heliumをインストールします。
selenium、urllib3、heliumがインストールされます。
pip install helium
Edge WebDriverのインストール
ChromeとFirefoxのドライバは同梱されていますが、Edgeは別途インストールする必要がありますが、簡単です。
Edgeのバージョン確認
Edgeを開いて、バージョンを確認します。
WebDriverのダウンロード
Microsoft Edge Developerのサイトから、Microsoft Edgeドライバーをダウンロードします。
上記で確認したバージョン・OSと一致するドライバーをダウンロードしてください。
また、Edgeのバージョンが上がった場合は再度ドライバーをダウンロードしてください。
ダウンロードしたドライバーを解凍し、msedgedriver.exeを適当な場所に配置します。
(このサイトの例では、C:¥EdgeWebDriverの下に配置しています。)
これで、設定は完了です。
コーディングして実行してみる
必要なライブラリをimport
heliumとseleniumのドライバをimportします。
from helium import *
from selenium.webdriver import Edge
ドライバーの指定
ドライバを指定します。先ほど配置したドライバの場所を指定します。
driverpath = "C:\EdgeWebDriver\msedgedriver.exe"
driver = Edge(executable_path=drivepath
set_driver(driver)
ブラウザを開いて、URLを指定
指定したサイトへ飛びます。
driver.set_window_size(1200, 800) # 任意(ブラウザのサイズを指定しています)
go_to('https://welovepython.net')
「お問い合わせ」リンクをクリック。データを入力し送信ボタンを押下。
「お問い合わせ」のリンクを探しクリックして、お問い合わせ画面に遷移します。
「指名」のラベルを探して「北海 太郎」と入力します。
「メールアドレス」のラベルを探して「hogehoge@mail.com」と入力します。
「メッセージ本文」のラベルを探して「こんにちは・・・・・・・・・」と入力します。
「送信」ボタンを押します。メールが送信されます。
データの入力箇所は、ラベル名での指定が可能です。このあたりは試行錯誤でやってみてください。
簡単な画面ですが、ほぼ実際の操作と同じようにコードを書けるのが分かっていただけるのではないでしょうか。
click(Link('お問い合わせ'))
write('北海 太郎', into='氏名')
write('hogehoge@mail.com', into='メールアドレス')
write('こんにちは\nはじめまして。\n\n'
'これは、Heliumからの自動投稿です。\n'
'記念すべきBlogの記事1号です。\n'
'これから少しずつ記事を追加していきますのでよろしくお願いします。'
, into='メッセージ本文')
click(Button('送信'))
実際に届いたメールです。
その他の操作 (随時追加します)
プルダウンの選択
「回数」のプルダウンで2を選択します
select('回数', '2')
ボタンの押下
「登録」という名前のボタンを押します。
click(Button('登録'))
タブ移動
タブで次のフィールドに移動します。続けて項目を入力するときは、タブでの移動が楽です。
press(TAB)
スクリーンショット
ファイル名を指定して、スクリーンショット(テストのエビデンスなど)を保存します。
driver.save_screenshot('ファイル名')
補足
- Jupyter notebookから使えますので、対話的に試行錯誤しながらコーディングができます。これが非常に便利です。
- heliumだけで対応できない場合は、seleniumの構文も利用可能です。
- テキストボックスやプルダウン、ボタンなどはラベルを指定して呼び出すことが可能です。ラベルとTABの組み合わせで柔軟に対応が可能です。
- TABを使用すると、入力が完了しないうちにカーソルが移動しまうことがあります。その場合は処理がそこで止まってしまいますので、time.sleep(n)を指定して少し時間をあけてみてください。
- 同じラベル名が画面内に複数ある時にラベル名で指定をするとエラーとなります。
- ブラウザのバージョンが上がるとスクリプトがこけます。そのときは、新しいバージョンのドライバをダウンロードして入れ替えてください。
おわりに
Seleniumの時は、業務で使うまでには至りませんでした。
Heliumを知ってから、RPA的な使い方をしたり、リグレッション試験で使うようになりました。Jupyter notebookで試行錯誤しながらコードを作成する方法との相性がすごくいいのも嬉しいです。
現在アップデートが止まっている事、ドキュメントがほとんどないことが残念です。
私は、帳票出力の新旧の比較試験にこのHeliumを使用しました。
新旧それぞれ50パターンの出力をHeliumで自動化し、指定した入力パラメータをHeliumでスクリーンショットを撮ることにより入力パターンのエビデンスとしました。
人がやると時間もかかりますしミスもあります。50パターンの帳票を出力する時間はわずか数分でした。RPAのような使い方ですけど、かなりの工数削減にはなったと思いますし、何よりも入力ミスなどがなくなってよかったと思っています。
コメント