PHPでお問合せフォームなどを作っていて、挙動を確認するために
手動で何度もinput要素に入力して、select要素を選択して、submitボタンを押して…とやるのが面倒くさいな…と思ったので、Pythonの「Selenium」ライブラリを使って自動化してみました。
テストするフォームを用意
今回はこんな感じのPHPでできたお問合せフォームの挙動を確認するとします。
index.php
のformがPOSTメソッドでconfirm.php
に入力された値を送信し、confirm.php
で入力内容を確認してsubmitボタンを押すと、指定したメールアドレスに問い合わせ内容が送信され、ユーザーをサンクスページへ遷移させる、という流れのフォームになっています。
(バリデーションについては割愛します)
Seleniumのインストール
pip install selenium==3.141.0
# Anaconda環境の場合は
conda install selenium=3.141.0
Chrome Driverのダウンロード
https://chromedriver.chromium.org/downloads
からご自身のOSとChromeのバージョンにあったドライバーをインストールしておいてください。
webdriverオブジェクトでフォームのURLにアクセス
ここからが本題のPythonプログラムになります。
seleniumライブラリをインポートして、自動でブラウザを操作する主体となるwebdriverオブジェクトをインスタンス化します。
変数url
には、先ほどのお問合せフォームのURLを文字列で指定します。
ローカル開発環境(http://localhost/ とか http://127.0.0.1/)
でも大丈夫です。
urlを引数に、get(url)
メソッドで指定したURLにアクセスします。
from selenium import webdriver
from selenium.webdriver.support.select import Select
url = "フォームのURL/index.php"
browser = webdriver.Chrome("Chrome Driverへのパス")
browser.set_page_load_timeout(60)
browser.get(url)
入力したい要素を見つけ、send_keysメソッドで値を入力する
フォームにアクセスできたら、次はinput要素やselect要素など、値を入力する要素をhtml要素の中から探して指定します。
inputやselectにname属性を指定している場合は、find_element_by_name('name属性の値')
で要素を取得できます。
inputやselectにidを付与している場合は、find_element_by_id('id')
でも同様に取得できます。
そして、取得した要素に対して、send_keys('value属性の値')
メソッドで入力したい値を指定します。
基本的には、テストしたい要素の数だけこの「要素を取得して、send_keys()
で入力する」を繰り返します。
#姓を自動入力
first_name = browser.find_element_by_name("first_name")
first_name.send_keys("山田")
#名を自動入力
last_name = browser.find_element_by_name("last_name")
last_name.send_keys("太郎")
####以下同様に
最後に、submitボタンを取得して、click()
メソッドでクリックさせます。
#index.phpの送信ボタンを自動で押す
submit = browser.find_element_by_name("submit")
submit.click()
今回のフォームの場合だと、これで全ての要素に自動で値が入力され、確認画面(confirm.php
)に遷移します。
確認画面の送信ボタン(name属性はsend)も一緒に押して、メールの送信まで自動でテストしたい場合は、次のコードもまとめて実行してください。
今回のPythonコードの全体はこちら。
from selenium import webdriver
from selenium.webdriver.support.select import Select
url = "フォームのURL/index.php"
browser = webdriver.Chrome("Chrome Driverへのパス")
browser.set_page_load_timeout(60)
browser.get(url)
#姓を自動入力
first_name = browser.find_element_by_name("first_name")
first_name.send_keys("山田")
#名を自動入力
last_name = browser.find_element_by_name("last_name")
last_name.send_keys("太郎")
#郵便番号を自動入力
postal_code = browser.find_element_by_name("postal_code")
postal_code.send_keys("123-4567")
#都道府県を自動入力
pref = browser.find_element_by_name("pref")
pref.send_keys("東京都")
#市区町村を自動入力
city = browser.find_element_by_name("city")
city.send_keys("港区芝公園")
#丁目・番地を自動入力
address = browser.find_element_by_name("address")
address.send_keys("4丁目2-8")
#建物名・部屋番号を自動入力
building = browser.find_element_by_name("building")
building.send_keys("〇〇コーポ202号室")
#電話番号を自動入力
tel = browser.find_element_by_name("tel")
tel.send_keys("09000000000")
#メールアドレスを自動入力
email = browser.find_element_by_name("email")
email.send_keys("example@mail.com")
#誕生年を自動入力
birthyear = browser.find_element_by_name("birthyear")
birthyear.send_keys("1990年")
#誕生月を自動入力
birthmonth = browser.find_element_by_name("birthmonth")
birthmonth.send_keys("1")
#誕生日を自動入力
birthday = browser.find_element_by_name("birthday")
birthday.send_keys("1")
#ご意見を自動入力
opinion = browser.find_element_by_name("opinion")
opinion.send_keys("テスト送信です。")
#index.phpの送信ボタンを自動で押す
submit = browser.find_element_by_name("submit")
submit.click()
#confirm.phpの送信ボタンも自動で押す場合は下記を追加
# send = browser.find_element_by_name("send")
# send.click()
今回のサンプルコードのGitHubリポジトリはこちら