selenium を用いた半自動E2Eテスト
acmes-google-calendar を開発するにあたり、ブラウザで実際に値を入力し、それがカレンダーに追加されるかどうかを確かめる必要がありました。設定を変えてもしっかりと追加されるかどうかも確認する必要がありました。その際、いちいち手動で入力するのは、時間がかかり、面倒でもあるので、selenium を用いて自動で入力されるようにしました。
selenium の起動
導入が簡単な Docker を用います。次のコマンドを入力します。
docker run -d -p 4444:4444 -p 5900:5900 selenium/standalone-chrome-debug:3.2.0-actinium
selenium を操作する
今回は Python を使用します。次のコマンドを実行します。
pip install selenium
続いて、selenium を動作させるプログラムを用意します。次のプログラムは、acms-google-calendar をテストする例です。
from selenium import webdriver
# send_keysでclick処理
# click()では押せないボタンがあったため
from selenium.webdriver.common.keys import Keys
# selectタグを使用
from selenium.webdriver.support.ui import Select
# 指定時間待機
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
# Chrome を使用
options = webdriver.ChromeOptions()
print('connectiong to remote browser...')
driver = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
desired_capabilities=options.to_capabilities(),
options=options,
)
try:
driver.get('テストするページ')
print("connected to", driver.current_url)
# ご用件
description = driver.find_element_by_id('description')
contant_description = Select(description)
contant_description.select_by_value("その他")
# お問い合わせ内容
driver.find_element_by_id('inquiry').send_keys("selenium を使った自動入力テスト")
# お名前
driver.find_element_by_id("family-name").send_keys("テスト")
driver.find_element_by_id("given-name").send_keys("太郎")
# メールアドレス
driver.find_element_by_id("email").send_keys("example@email.com")
# ご住所(郵便番号)
driver.find_element_by_id("postal-code").send_keys("999-9999")
# 開始日時
driver.find_element_by_name("start_date").send_keys("2020-07-01")
driver.find_element_by_name("start_time").send_keys("12:00:00")
# 終了日時
driver.find_element_by_name("finish_date").send_keys("2020-07-01")
driver.find_element_by_name("finish_time").send_keys("15:00:00")
driver.find_element_by_id("btnConfirm").send_keys(Keys.ENTER)
# 読み込み待機
sleep(1)
driver.find_element_by_id("btnSubmit").send_keys(Keys.ENTER)
sleep(5)
# ブラウザを終了する
driver.quit()
except Exception as e:
print("error:", e.args)
driver.quit()参考サイト
- 10分で理解する Selenium, https://qiita.com/Chanmoro/items/9a3c86bb465c1cce738a
- Seleniumで要素を選択する方法まとめ, https://qiita.com/VA_nakatsu/items/0095755dc48ad7e86e2f
- PythonとSeleniumを使用したドロップダウンメニューの取得して値をセットする,https://qiita.com/redoriva/items/aa9fa4c0bf2aeb8e1bff