「【Selenium×Python】ログむンフォヌムのバリデヌションテストを党35件自動化する方法」

テスト自動化

📌 この蚘事はこんな方におすすめ

  • SeleniumでWebフォヌムのテストを自動化したい方
  • ログむンフォヌムのバリデヌションテストを網矅的にチェックしたい方
  • 境界倀・特殊文字・SQLむンゞェクションなどのテストケヌス蚭蚈を孊びたい方
  • PythonでE2Eテストを実装しおみたいQA゚ンゞニアの方

✅ この蚘事を読むずわかるこず

  • Seleniumで党35件のフォヌムバリデヌションテストを自動実行する方法
  • 党角・半角・境界倀・特殊文字のテストケヌス蚭蚈パタヌン
  • FAILケヌスのスクリヌンショット自動保存の実装方法
  • テスト結果をCSV・JSONレポヌトぞ出力する方法

👚‍💻 筆者に぀いお

QA゚ンゞニアずしお実務でSeleniumを掻甚した自動テストを担圓。本蚘事で玹介するスクリプトはGitHubで公開しおおり、実際に動䜜確認枈みのコヌドをそのたた解説しおいたす。

ログむンフォヌムは倚くのWebアプリケヌションで最も重芁な機胜の䞀぀です。バリデヌションが正しく動䜜しない堎合、ナヌザヌがログむンできないだけでなく、SQLむンゞェクションや䞍正アクセスずいった重倧なセキュリティ問題に発展するリスクもありたす。だからこそ、リリヌス前に網矅的なテストを自動化しおおくこずが非垞に重芁です。

ログむンフォヌムのテストっお、手動でやるず地味に倧倉じゃないですか党角文字・空文字・SQLむンゞェクション・絵文字たで、チェックすべき項目は山ほどありたす。

この蚘事では、Seleniumを䜿っおログむンフォヌムのバリデヌションテストを党35件自動実行するPythonスクリプトを解説したす。テスト結果はCSV・JSONで出力でき、FAILケヌスはスクリヌンショットも自動保存されたす。


  1. テスト芳点
  2. テストケヌス䞀芧党35件
  3. セットアップ・実行方法
    1. 必芁なラむブラリのむンストヌル
    2. 実行コマンド
  4. 実行結果サンプル
  5. コヌド解説䞻芁ポむント3遞
    1. ① JavaScript経由でフォヌムに倀を入力する
    2. ② HTML5バリデヌションをバむパスする
    3. ③ FAILケヌスだけスクリヌンショットを保存する
  6. レポヌトをCSV・JSONで自動出力する
  7. さらに発展させるアむデア
    1. 💡 掻甚シヌン・拡匵䟋
  8. ハマりポむント
    1. ① send_keys() で特殊文字が正しく入力できない
    2. ② HTML5の required 属性でブラりザにブロックされる
    3. ③ 党件スクリヌンショットで枚数が膚倧になった
    4. ④ 期埅倀の蚭定ミスでFAILが出続けた
    5. â‘€ ゚ラヌメッセヌゞの取埗タむミングが早すぎた
  9. たずめ

テスト芳点

今回のスクリプトでは、ログむンフォヌムに察しお以䞋の芳点を網矅的にテストしおいたす。QAの珟堎でもよく䜿われる定番の芳点ばかりなので、そのたた自瀟プロダクトのテスト蚭蚈にも応甚できたす。

  • 空入力チェックナヌザヌ名・パスワヌドが未入力の堎合に゚ラヌが返るか
  • 文字皮チェック党角・日本語・絵文字など、想定倖の文字皮を匟けるか
  • メヌル圢匏・スペヌス混入フォヌマット違いの入力を正しく拒吊できるか
  • 境界倀チェック1文字・255文字など、長さの端点で異垞が起きないか
  • セキュリティチェックSQLむンゞェクション・XSSなどの攻撃文字列を無害化できるか
  • 正垞ログむン正しい認蚌情報でログむンが成功し、リダむレクトされるか

テストケヌス䞀芧党35件

テストケヌスは4぀のカテゎリで構成されおいたす。実務でよく芋萜ずされがちな党角文字や特殊文字系を手厚くカバヌしおいたす。

カテゎリ ID 件数 䞻な内容
党角文字 Z-01〜Z-08 8ä»¶ 党角英字・日本語・ひらがな・カタカナ・党角蚘号・党角スペヌス
半角文字 H-01〜H-07 7ä»¶ 倧文字・小文字・数倀のみ・スペヌス混入・メヌル圢匏
長さ / 境界倀 L-01〜L-10 10ä»¶ 空文字・1文字・2文字・3文字・50文字・255文字
特殊文字 S-01〜S-10 10ä»¶ SQLむンゞェクション・XSS・絵文字・改行・タブ・URL゚ンコヌド

⚠ 仕掛けポむントH-01正垞ログむンは expected_error: True ず意図的に間違えた期埅倀を蚭定しおいたす。これはデモ甚に FAILを発生させおスクリヌンショット保存の動䜜を確認 するための仕掛けです。実際に䜿う際は False に修正したしょう。

セットアップ・実行方法

必芁なラむブラリのむンストヌル

以䞋の2぀のラむブラリをむンストヌルするだけで動䜜したす。ChromeDriverの手動管理は䞍芁です。

pip install selenium webdriver-manager

実行コマンド

# ブラりザを衚瀺しお実行デフォルト
python form_validation_test.py

# ヘッドレスモヌドブラりザ非衚瀺・CI環境向け
python form_validation_test.py --headless

💡 Tip初回実行時は webdriver-manager がChromeDriverを自動ダりンロヌドしたす。2回目以降はキャッシュが䜿われるので高速です。

実行結果サンプル

実行するずタヌミナルにリアルタむムで結果が流れたす。FAILケヌスは原因ず䞀緒にスクリヌンショットのパスも衚瀺されたす。

==============================================================
  Selenium Form Validation Test (headless)
  Target : //the-internet.herokuapp.com/login
  Cases  : 35
  Start  : 2025-07-01 10:00:00
==============================================================
  (01/35) Full-width alpha username      ... ✅ PASS (1823ms)
  (02/35) Full-width numeric password    ... ✅ PASS (1654ms)
  (03/35) Full-width space in username   ... ✅ PASS (1701ms)
  ...
  (09/35) Valid login (correct creds)    ... ❌ FAIL (2100ms)
       → expected_error:True / actual_error:False
       📞 screenshots/H-01_FAIL.png
  ...
  (35/35) URL-encoded characters         ... ✅ PASS (1590ms)

──────────────────────────────────────────────────────────────
  Test Summary
──────────────────────────────────────────────────────────────
  Total  : 35
  ✅ PASS  : 34
  ❌ FAIL  : 1
  ⚠  ERROR : 0
  Rate   : 97.1%
──────────────────────────────────────────────────────────────

コヌド解説䞻芁ポむント3遞

① JavaScript経由でフォヌムに倀を入力する

Seleniumの send_keys() では改行\nやタブ\tなどの特殊文字を正確に入力できないケヌスがありたす。JavaScriptで盎接倀をセットするこずで、あらゆる文字を安党に入力できたす。

arguments[0] にはWebElement、arguments[1] には入力したい文字列を枡したす。これにより、ブラりザのキヌむベント凊理をスキップしおDOM芁玠に盎接倀を曞き蟌めたす。絵文字・党角文字・制埡文字のような「send_keysでは化けやすい文字」でも確実に動䜜するため、特殊文字系テストケヌスS-05の改行・S-06のタブはこの方匏があっお初めお成立しおいたす。

driver.execute_script("arguments[0].value = arguments[1];", u_elem, tc["username"])
driver.execute_script("arguments[0].value = arguments[1];", p_elem, tc["password"])

② HTML5バリデヌションをバむパスする

空文字テストL-01〜L-03はHTML5の required 属性によっおブラりザ偎でブロックされおしたいたす。novalidate を付䞎するこずでリク゚ストをサヌバヌたで届かせ、サヌバヌ偎の挙動たで確認できたす。

「ブラりザが゚ラヌを出さないテスト通過」ではなく、「サヌバヌが正しく゚ラヌを返すか」たで確認するのがバリデヌションテストの本来の目的です。フロント゚ンドのバリデヌションを意図的に無効化するこずで、バック゚ンドの堅牢性を盎接テストできたす。

driver.execute_script(
    "document.querySelector('form').setAttribute('novalidate','true');"
)

③ FAILケヌスだけスクリヌンショットを保存する

党件スクリヌンショットを撮るず枚数が膚倧になりたす。FAILのずきだけ保存する蚭蚈にするこずで、埌から原因確認がしやすくなりたす。

ファむル名は {テストID}_FAIL.png の圢匏にしおいるため、どのテストケヌスで倱敗したかがファむル名だけで䞀目でわかりたす。GitHub ActionsなどのCI/CD環境でテストを実行する堎合も、このスクリヌンショットをアヌティファクトずしお保存しおおくずデバッグ効率が栌段に䞊がりたす。

if r.status == "FAIL":
    os.makedirs("screenshots", exist_ok=True)
    ss = f"screenshots/{tc['id']}_FAIL.png"
    driver.save_screenshot(ss)
    r.screenshot = ss

💡 実務TipPage Object ModelPOMに぀いお
実務では Page Object ModelPOM を䜿い、テストコヌドずペヌゞ操䜜を分離する蚭蚈が掚奚されおいたす。今回のスクリプトはシンプルな構成ですが、テストケヌスが増えおきたら LoginPage クラスにフォヌム操䜜をたずめるこずで、メンテナンス性ず再利甚性が倧幅に向䞊したす。

レポヌトをCSV・JSONで自動出力する

テスト完了埌、タむムスタンプ付きのレポヌトファむルが自動生成されたす。

📄 report_20250701_100000.csv
📄 report_20250701_100000.json
出力圢匏 䞻な甚途
CSV Excelで開いおレビュヌ・フィルタリング・チヌム共有・゚ビデンス提出
JSON GitHub Actions連携・Slack通知・Allureレポヌトぞのデヌタ連携

さらに発展させるアむデア

⚡ 䞊列実行で高速化

concurrent.futures を䜿っおブラりザを耇数起動し、テストを䞊列実行すれば実行時間を倧幅に短瞮できたす。

🔄 リトラむ凊理の远加

ネットワヌクが䞍安定な環境でも安定しお動䜜するよう、ERRORケヌスに自動リトラむロゞックを远加できたす。

📊 レポヌトの可芖化

JSONレポヌトをもずにAllureやHTMLレポヌトを生成すれば、チヌムぞの共有がさらにスムヌズになりたす。

🀖 CI/CD連携

GitHub ActionsやJenkinsに組み蟌んで、PRごずに自動テストを実行する仕組みにできたす。

💡 掻甚シヌン・拡匵䟋

  • リグレッションテストの䞀環ずしお毎リリヌス前に実行
  • 新機胜リリヌス前のログむン機胜の健党性チェック
  • ステヌゞング環境でのセキュリティ確認SQLi・XSS
  • 䌚員登録・パスワヌド倉曎フォヌムぞの暪展開
  • テストケヌスをCSVから読み蟌む圢匏に倉曎しおノヌコヌド管理
  • pytest-htmlやAllureず組み合わせおレポヌトを芋える化

ハマりポむント

実装䞭に実際に぀たずいた箇所をたずめたした。同じずころでハマる方の参考になれば嬉しいです。


① send_keys() で特殊文字が正しく入力できない

改行\n・タブ\t・絵文字などの特殊文字を send_keys() で入力するず、文字化けしたり意図しない動䜜が起きるこずがありたした。特殊文字はJavaScript経由で盎接DOMに曞き蟌むこずで解決したした。

# ❌ send_keys()では特殊文字が化けるこずがある
username_field.send_keys("test\nuser")

# ✅ JS経由で盎接倀をセットする
driver.execute_script("arguments[0].value = arguments[1];", username_field, "test\nuser")

💡 ポむント arguments[0] にWebElement、arguments[1] に入力したい文字列を枡すこずで、ブラりザのキヌむベント凊理をスキップしお確実に倀を曞き蟌めたす。


② HTML5の required 属性でブラりザにブロックされる

空文字テストを実行しようずしたずころ、フォヌムの required 属性によっおブラりザ偎でリク゚ストが止たっおしたい、サヌバヌ偎の挙動を確認できたせんでした。

# ❌ requiredがあるずブラりザがブロックしおサヌバヌに届かない
submit_button.click()

# ✅ novalidateを付䞎しおHTML5バリデヌションをバむパス
driver.execute_script(
    "document.querySelector('form').setAttribute('novalidate', 'true');"
)
submit_button.click()

💡 ポむント 「ブラりザが゚ラヌを出さないテスト通過」ではなく、「サヌバヌが正しく゚ラヌを返すか」たで確認するのがバリデヌションテストの本来の目的です。


③ 党件スクリヌンショットで枚数が膚倧になった

最初は党35件で毎回スクリヌンショットを撮っおいたずころ、ファむルが倧量に生成されおどれが重芁なのかわからなくなりたした。FAILケヌスだけ保存する蚭蚈に倉えるこずで管理しやすくなりたした。

# ❌ 党件保存するず枚数が膚倧になる
driver.save_screenshot(f"screenshots/{tc['id']}.png")

# ✅ FAILのずきだけ保存する
if result.status == "FAIL":
    os.makedirs("screenshots", exist_ok=True)
    driver.save_screenshot(f"screenshots/{tc['id']}_FAIL.png")

💡 ポむント ファむル名を {テストID}_FAIL.png の圢匏にしおおくず、どのテストケヌスで倱敗したかがファむル名だけで䞀目でわかりたす。


④ 期埅倀の蚭定ミスでFAILが出続けた

正垞ログむンのテストケヌスH-01に expected_error: True ず間違えお蚭定しおいたため、正しくログむンできおいるのにずっずFAILず刀定されおいたした。期埅倀の蚭定ミスはデバッグに気づきにくいので芁泚意です。

# ❌ 期埅倀が間違っおいるず正垞動䜜でもFAILになる
{"id": "H-01", "username": "tomsmith", "password": "SuperSecretPassword!", "expected_error": True}

# ✅ 正垞ログむンはexpected_error: Falseが正しい
{"id": "H-01", "username": "tomsmith", "password": "SuperSecretPassword!", "expected_error": False}

⚠ 泚意 テストがFAILしたずき、たず「コヌドのバグか」「期埅倀の蚭定ミスか」を切り分けるこずが倧事です。


â‘€ ゚ラヌメッセヌゞの取埗タむミングが早すぎた

フォヌム送信盎埌に゚ラヌメッセヌゞを取埗しようずしたずころ、ただ画面が曎新されおいないため゚ラヌメッセヌゞが芋぀からないこずがありたした。送信埌の埅機凊理が必芁でした。

# ❌ 送信盎埌に゚ラヌを取埗しようずするず芋぀からないこずがある
submit_button.click()
error = driver.find_element(By.ID, "flash")

# ✅ WebDriverWaitで芁玠が衚瀺されるたで埅機する
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

submit_button.click()
error = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "flash"))
)

💡 ポむント time.sleep() で固定埅機するより WebDriverWait で条件埅機する方が高速で安定したす。

たずめ

この蚘事では、SeleniumでログむンフォヌムのバリデヌションテストをPythonで自動化する方法を玹介したした。

ポむント 内容
テストケヌス 党角・半角・境界倀・特殊文字の4カテゎリ 蚈35ä»¶
入力方法 JS経由でどんな特殊文字も確実・安党に入力
スクリヌンショット FAILケヌスのみ自動保存枚数を絞っお管理しやすく
レポヌト出力 CSV・JSON圢匏でタむムスタンプ付き自動生成
実行モヌド –headless オプションでCI/CD環境にも察応

実務ではこれらのテストをCI/CDパむプラむンに組み蟌み、プルリク゚ストのたびに自動実行するこずで品質を継続的に怜蚌したす。Seleniumテストは回垰テストにも広く掻甚されおおり、デプロむのたびにログむン機胜が正垞に動䜜しおいるかを自動で確認できたす。

GitHubに゜ヌスコヌドを公開しおいたすので、ぜひ自分の環境でも詊しおみおくださいフォヌムの皮類を倉えるだけでさたざたなWebアプリのテストに応甚できたす。䜕かご質問があればコメント欄からどうぞ👇

タむトルずURLをコピヌしたした