前提条件

フォームのバリデーションチェックのテストって面倒ですよね。
いちいちフォームの入力窓に入力して、送信ボタンを押してエラーメッセージを読んでバグをなおして、またフォームに入力して
…なんて、入力項目がものすごく多いフォームだともう気が狂いそうです。
そこで、フォームの入力だけでも一発で実行する方法をまとめました。

    • macOS 12.4 Monterey

 

    • jupyter lab 3.1.4

 

    Python 3.9.5

jupyter labとpython3はインストールされている状態からスタートします。入っていない人は、インストールしましょう。
jupyter labはjupyter notebookでも大丈夫です。
またローカル開発環境でもテストできる方が便利なので、Google Colaboratoryではやらない方が良いと思います。

jupyter labにプロジェクトファイルを作る

ターミナルで以下のコマンドを叩く。
通常、グローバルでインストールしていると思うのでディレクトリはどこでもOKだと思います。

$ jupyter lab

ブラウザでjupyter labが開くので、ウインドウ左上のjupyter labのロゴの下あたりにある+マークのボタンを押す。

NotebookのPython 3 (ipykernel)ボタンを押して新しいプロジェクトファイルを追加する。

色々インストールする

!pip install selenium

# 現在使用しているchromeと同じバージョンのChrome Driverを自動でインストールしてくれるwebdriver_managerをインストール
!pip install webdriver_manager

インストール先を確認する

先ほどpipでインストールした先を調べて、環境変数を設定します。

# pipでwebdriver_managerをインストールした場所を調べる
import sys
print(sys.executable)

これで出力されたパスを次のappendメソッドの引数に渡します。

# pipでwebdriver_managerをインストールしているディレクトリの環境変数を渡す
import sys
sys.path.append('パス')

ブラウザを開く

from selenium import webdriver
from time import sleep
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

URLにアクセスする

driver.get('テスト環境のURL')

sleep(1)

入力窓に値を入力

入力窓のセレクタを調べて引数に入れないといけませんが、ここが結構面倒なので、デベロッパーツールでinputタグを右クリックして、コピー > xpathをコピーを選択してコピーします。

スクリーンショット 2022-12-11 18.45.11.png

以下のfind_element_by_xpath()の引数にペーストすれば確実にそこへ入力させることができます。
あとは、入力窓に入力したい値をsend_keysに入れましょう。

# 入力窓を取得と入力(入力窓のHTML上で右クリックしてCopy XPathをして取得した値を入れる)
elem_username = driver.find_element_by_xpath('取ってきたxpath')
elem_username.clear()
elem_username.send_keys('入力したい値')

これを繰り返して、フォームに入れたい値をどんどん書いていきます。

ちなみに、新しいselenium4以降は、このセレクタの書き方が変わったようです。
新しいバージョンを使用している方は、公式ドキュメントに書き方が書いてあるので、そちらを参考に書き換えてみてください。

参考:【Python】find_element(By.XPATH, “xxx”)・・・xpathから要素を取得する

送信ボタンを押させる

送信ボタンのxpathもデベロッパーツールから調べてきて、引数に入れてください。
実行させると送信ボタンが押されます。

elem_submit_btn = driver.find_element_by_xpath('取ってきたxpath')
elem_submit_btn.click()

あとはひたすらデバッグです。
では、良いテストライフを〜!

おまけ:basic認証を抜ける方法

basic認証をかけているサイトだと、サイトにアクセスした時に認証に引っかかって、フォームに直接入れない場合があります。
その場合は、一度サイトのTopへ遷移するURLを、以下のように工夫をする必要があります。

driver.get('http://basic認証のユーザ名:パスワード@テスト環境のTopページURL')
driver.get(' フォームページのURL')
广告
将在 10 秒后关闭
bannerAds