1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

seleniumでフォームのテストを自動化する方法

Last updated at Posted at 2022-12-11

前提条件

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

  • 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')
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?