UIを自動で操作できるとWebアプリのテスト自動化だけでなく、繰り返し日常業務においても自動化できて効率化が図れる。特にあまり変更のないシステムを自動操作すると、メンテの必要があまりなくなるため便利になる。この記事では自動化で有名なライブラリ「selenium」関連をまとめておく。記載言語はすべてpythonである。
seleniumとは
上述した通り、WebUIを自動化するために使われるライブラリとして有名なのがseleniumである。基本動作としては、Web上にあるエレメントを指定しそれに対して操作メソッドを実行することで、自動的に操作を行うものである。
ドライバのインストール
seleniumを使うには各ブラウザに対応したドライバをインストールする必要がある。例えばMicrosoft Edgeのドライバはここにある。
ダウンロードしておき、任意のディレクトリに格納する。そのパスはこの後使うのでわかりやすいところに置くのをお勧めする。
ドライバと待ち時間の設定
ドライバの設定をする。下記とは違った方法で設定するサイトが散見されるが、seleniumのバージョンアップによりうまくいかないことがあるので注意。
service = Service(executablr_path=XXXXXX) # ダウンロードしたのドライバのパス
driver = webdriver.Edge(service=service)
この時SessionNotCreatedExceptionが発生することがある。これは使用しているブラウザのバージョンがドライバのバージョンに対応していない場合に起こる。適宜ブラウザ及びドライバのバージョン更新をすること。※Chromeを使用する場合は、webdriver-managerを使用するとドライバを自動更新してくれる。(便利!!!)
下記で待機時間を設定する。
wait = WebDriverWait(driver, 10)
seleniumでは、操作をする時にページのロードやプログラムの処理が早すぎて、指定したエレメントがまだないためにエラーが発生することが頻繁にある。そこで待機時間を設定することで、エレメントが見つからない時に何秒待つかなどを設定できる。(※ここでは10秒を設定しているだけで、何が起きるまで待機するかは設定していないことに注意)上記はドライバに10秒間待機することを設定している。
seleniumで出来る各操作
- 指定したURLを開く
driver.get(URL)
- ブラウザを閉じる
driver.quit()
- ボタンをクリックする
wait.until(EC.visibility_of_element_located((By.XPATH, XXXXXX)))
button = driver.find_element(By.XPATH, XXXXXX)
button.click()
1行目が上述した何が起こるまで待機するかを示した部分である。この場合は、指定したxpathが表示されるまで待機することを示している。(この後の操作に関しては記載を省略する。)その他にも設定できる待機アクションはあるのでリファレンスを見てほしい。
2行目で該当のエレメントを指定し、clickメソッドでそのエレメントをクリックする動作が実現できる。エレメントの指定方法はxpathだけでなくid, class, cssセレクタ等あるので任意のもので指定すれば良い。
- テキストを入力する
form = driver.find_element(By.XPATH, XXXXXX)
form.send('メッセージ') # 入力したいテキストを指定
- テキストを消す
form = driver.find_element(By.XPATH, XXXXXX)
form.clear()
- プルダウンを選択する
drop_down = driver.find_element(By.XPATH, XXXXXX)
select = Select(drop_down)
select.select_by_value('選択したい文字')
- 文字列を取得する
value = driver.find_element(By.XPATH, XXXXXX)
text = value.text
※text == ''の時は
text = value.get_attribute('value')
で取得する。
- ポップアップに対しての操作
Alert(driver).accept() # OK
Alert(driver).dismiss() # キャンセル
- 操作するタブを切り替える
driver.switch_to.window(driver.window_handles[X])
基本的には一番最初が[0]で次のタブが[1], [2], …と増えていく。新しいタブが立ち上がる場合は、画面は切り替わっていてもdriverのタブを切り替えないと操作できないので注意。
- iframe切り替え
# 切り替え
iframe = driver.find_element(By.XPATH, XXXXXX)
driver.switch_to.frame(iframe)
# 元に戻る
driver.switch_to.default_content()
新しいタブは立ち上がっていないのに、なぜかエレメントがないと言われ操作ができない場合に疑って見てほしい原因の1つ。iframeを操作するためにはiframeに切り替えなければならない。iframe操作後は元に戻る必要がある。
- JavaScriptの実行
element = driver.find_element(By.XPATH, XXXXXX)
driver.execute_script('argumants[0].scrollIntoView(true)', element)
この例は指定した要素までスクロールを行う処理である。指定した要素が画面にない場合、スクロールして要素のある所まで移動する必要があったりする。その場合はこの処理を入れてみてほしい。
まとめ
この記事では基本的な操作の紹介した。開発する中で個人的にやってきたことなどを別記事で紹介したいと思う。
コメント