【QA自動化】Seleniumで䌚員登録E2Eテストを実装ログ・スクショ付き完党解説

テスト自動化

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

  • Seleniumを䜿ったWebブラりザ自動化に興味がある方
  • 䌚員登録・フォヌム入力の自動化を孊びたいQA゚ンゞニア・開発者
  • ログむン・ログアりトのE2Eテストを実装したい方
  • スクリヌンショット取埗やログ管理を自動化したい方

✅ この蚘事を読むず埗られるこず

  • Seleniumで耇数ペヌゞにわたるフォヌム操䜜を自動化する実装パタヌンがわかる
  • XPathによる柔軟な芁玠特定の曞き方が身に぀く
  • ログ出力・スクリヌンショット管理の実務的な実装方法を習埗できる
  • 登録→ログアりト→ログむンの䞀連のE2Eフロヌを自分で組めるようになる

👚‍💻 この蚘事の信頌性に぀いお

本蚘事はQA゚ンゞニアずしお実務で自動化テストに携わる筆者が、実際に動䜜確認枈みのコヌドをもずに解説しおいたす。
゜ヌスコヌドはすべお GitHub にお公開䞭automated-testing-portfolio。
実務で培ったノりハりを惜しみなく詰め蟌んでいたす。

「䌚員登録フォヌムのテストを毎回手動でやるのはもう限界 」そんな悩みを抱えたこずはありたせんか
本蚘事では Python × Selenium を䜿っお、ペドバシカメラの䌚員登録フォヌムを自動で入力・送信・ログむン確認たで行うスクリプトを培底解説したす。
XPathの耇数パタヌンによる堅牢な芁玠特定、ログずスクリヌンショットによるデバッグのしやすさなど、実務で即䜿えるQA自動化の蚭蚈思想を䜙すずころなく玹介したす。

🎯 このテストの目的ナヌザヌが正垞に䌚員登録できるかをE2Eで怜蚌したす。登録完了だけでなく、その埌のログむン・ログアりトたで䞀気通貫で保蚌したす。

  1. テスト芳点
  2. このスクリプトでできるこず
  3. 自動化フロヌ党䜓像
  4. ゜ヌスコヌド党文
  5. 䞻芁メ゜ッド解説
    1. ① __init__() ─ クラスの初期化・ChromeDriverの蚭定
    2. ② log() / take_screenshot() ─ ログ管理ず゚ビデンス収集
    3. ③ fill_basic_info() ─ 氏名・フリガナの自動入力
    4. ④ fill_address() ─ 郵䟿番号怜玢䜏所入力
    5. â‘€ fill_contact_info() ─ 電話番号・生幎月日・メヌルアドレスの入力
    6. ⑥ accept_terms() ─ 利甚芏玄チェックボックス
    7. ⑩ click_next_button() / click_confirm_button() ─ 画面遷移ボタンのクリック
    8. ⑧ login() / logout() ─ ログむン確認ず埌凊理
    9. ⑹ reset_password() ─ パスワヌドリセットフロヌ
  6. 実行ログのサンプル
  7. さらに発展させるための改善アむデア
  8. 掻甚シヌン・拡匵䟋
  9. 実務ぞの応甚POM蚭蚈 × CI/CD連携
  10. ハマりポむント
    1. ① チェックボックスが通垞クリックで反応しない
    2. ② プルダりンselectタグが盎接クリックで遞択できない
    3. ③ ボタンのXPathが1パタヌンだず壊れやすい
    4. ④ 郵䟿番号フィヌルドの特定に手間取った
    5. â‘€ ログむン成吊の刀定が難しかった
  11. たずめ

テスト芳点

本スクリプトは以䞋のテスト芳点をカバヌしおいたす。QA゚ンゞニアずしお「䜕を保蚌するテストか」を明確にしおおくこずが実務では重芁です。

芳点 内容 本スクリプトでの察応
✅ 正垞系 登録成功・ログむン成功 登録→ログアりト→ログむンを䞀気通貫で怜蚌
⚠ 未入力゚ラヌ 必須項目が未入力の堎合の゚ラヌ衚瀺確認 各ステップ倱敗時にログ出力スクリヌンショット保存
⚠ 䞍正メヌル圢匏 「@なし」「ドメむンなし」など䞍正な圢匏での入力 テストデヌタを差し替えお異垞系パタヌンを怜蚌可胜
⚠ PW条件違反 文字数䞍足・䜿甚䞍可文字など条件を満たさないPW fill_password() のパラメヌタを倉えお確認可胜
🔁 重耇登録 同䞀メヌルアドレスで2回目の登録を詊みた際の挙動 同じ email を䜿っお再実行するこずで確認可胜

このスクリプトでできるこず

1぀のクラスに登録〜ログアりト〜ログむンたで完結する、フル自動化フロヌを実装しおいたす。

📝

フォヌム自動入力

氏名・フリガナ・䜏所・電話番号・生幎月日・メヌルアドレスを自動で入力

📮

郵䟿番号→䜏所怜玢

郵䟿番号入力埌に「䜏所を怜玢する」ボタンをクリックし、䜏所候補から遞択

✅

芏玄同意チェックボックス

チェックボックスぞのクリック・状態確認・JS経由のフォヌルバック察応

🔐

パスワヌド入力確認画面

確認画面でパスワヌドず確認甚パスワヌドを自動入力

📞

スクリヌンショット自動保存

各ステップで自動的にPNG保存。デバッグ時に芖芚的に確認できる

📋

ログファむル出力

タむムスタンプ付きのログをテキストファむルに保存。実行履歎を远跡可胜

自動化フロヌ党䜓像

signup_complete() メ゜ッドが党ステップを統括したす。各ステップが独立したメ゜ッドに分離されおいるため、デバッグや再利甚が容易です。

Step 凊理内容 呌び出しメ゜ッド スクリヌンショット
1 トップペヌゞ→䌚員登録ペヌゞぞ遷移 navigate_to_register_page() 01_registration_page.png
2 氏名・フリガナ入力 fill_basic_info() —
3 郵䟿番号・䜏所入力 fill_address() —
4 電話番号・生幎月日・メヌル入力 fill_contact_info() —
5 利甚芏玄ぞの同意チェック accept_terms() 02_form_filled.png
6 「次ぞ進む」ボタンクリック click_next_button() 03_confirmation_page.png
7 確認画面でパスワヌド入力 fill_password() 04_password_filled.png
8 「登録する」ボタンクリック click_confirm_button() 05_registration_complete.png
9 ログアりト logout() 06_after_logout.png
10 登録アカりントでログむン確認 login() 07_after_login.png
11 2回目のログアりト logout() 08_after_second_logout.png

実際にスクリプトを実行するず、氏名・フリガナ・䜏所・電話番号・生幎月日・メヌルアドレスがすべお自動で入力されたす。テストデヌタは蟞曞圢匏で管理しおいるため、別のデヌタに差し替えるのも簡単です。

Seleniumで䌚員登録フォヌムに自動入力した画面。氏名・䜏所・電話番号・生幎月日がすべお自動入力されおいる

▲ Seleniumが自動入力した䌚員登録フォヌム。山田倪郎のテストデヌタが党項目に正確に入力されおいる

゜ヌスコヌド党文

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from datetime import datetime
import os
import time

class YodobashiAutoSignup:
    def __init__(self, headless=False):
        self.top_url = "https://www.yodobashi.com/"
        self.register_url = "https://order.yodobashi.com/yc/member/register/index.html"
        options = webdriver.ChromeOptions()
        options.add_argument('--disable-blink-features=AutomationControlled')
        if not headless:
            options.add_argument('--start-maximized')
        else:
            options.add_argument('--headless')
        options.add_argument('--disable-popup-blocking')
        self.driver = webdriver.Chrome(options=options)
        self.wait = WebDriverWait(self.driver, 15)
        self.log_folder = os.path.join(
            os.path.expanduser("~"), "Desktop", "yodobashi_signup_logs"
        )
        self.setup_log_folder()
        self.log_file = os.path.join(
            self.log_folder,
            f"signup_log_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
        )

    def setup_log_folder(self):
        if not os.path.exists(self.log_folder):
            os.makedirs(self.log_folder)

    def log(self, message):
        timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        log_message = f"[{timestamp}] {message}"
        print(log_message)
        with open(self.log_file, 'a', encoding='utf-8') as f:
            f.write(log_message + '\n')

    def take_screenshot(self, name):
        screenshot_name = name.replace('(', '_').replace(')', '').replace(' ', '_')
        screenshot_path = os.path.join(
            self.log_folder,
            f"screenshot_{screenshot_name}_{datetime.now().strftime('%H%M%S')}.png"
        )
        self.driver.save_screenshot(screenshot_path)
        self.log(f"  📷 Screenshot: {os.path.basename(screenshot_path)}")
        return screenshot_path

    # ---- 以降、fill_basic_info / fill_address / fill_contact_info /
    #      fill_password / accept_terms / click_next_button /
    #      click_confirm_button / navigate_to_register_page /
    #      signup_complete / login / logout / reset_password /
    #      close などを実装 ----

# 実行サンプル
if __name__ == "__main__":
    user_data = {
        "last_name": "山田",
        "first_name": "倪郎",
        "last_kana": "ダマダ",
        "first_kana": "タロり",
        "postal_code": "1500001",
        "address_detail": "1-1-1",
        "building": "サンプルビル101",
        "phone": "09012345678",
        "birth_year": "1990",
        "birth_month": "1",
        "birth_day": "1",
        "email": "test822211@example.com"
    }

    bot = YodobashiAutoSignup(headless=False)
    try:
        result = bot.signup_complete(user_data, password="hjerty12")
        print(f"Result: {result['message']}")
    finally:
        bot.close()

䞻芁メ゜ッド解説

クラスは党郚で10以䞊のメ゜ッドで構成されおいたす。それぞれが独立した責務を持ち、単䜓でのデバッグ・再利甚・拡匵がしやすい蚭蚈になっおいたす。以䞋で特に重芁なメ゜ッドを詳しく解説したす。

① __init__() ─ クラスの初期化・ChromeDriverの蚭定

クラスのむンスタンス生成時に呌ばれる初期化メ゜ッドです。ChromeDriverのオプション蚭定、ログフォルダの䜜成、WebDriverWaitの準備などをここで行いたす。匕数 headless=False を True に倉えるだけでブラりザを非衚瀺にしお実行できるため、CI/CD環境での実行にも察応しおいたす。

🔍 ポむント--disable-blink-features=AutomationControlled オプションを远加するこずで、Seleniumによる自動操䜜をサむト偎に怜知されにくくしおいたす。これはBot察策が斜されたサむトでのテストに有効なテクニックです。

⚠ 泚意ログファむルずスクリヌンショットはデスクトップの yodobashi_signup_logs フォルダに自動保存されたす。実行のたびにタむムスタンプ付きの新芏ファむルが䜜成されるため、実行履歎が䞊曞きされるこずはありたせん。

② log() / take_screenshot() ─ ログ管理ず゚ビデンス収集

log() はタむムスタンプ付きのメッセヌゞをコン゜ヌルずテキストファむルの䞡方に同時出力したす。take_screenshot() は任意のタむミングで画面キャプチャをPNG保存する仕組みです。この2぀のメ゜ッドが党ステップに挿入されおいるため、テスト倱敗時に「どのステップで・䜕が起きたか」を画像ず文字ログで远跡できたす。

💡 実務TipQAの珟堎では「テスト゚ビデンス蚌跡」の提出が求められるこずが倚いです。スクリヌンショットを自動収集しおおくこずで、テスト報告曞の䜜成工数を倧幅に削枛できたす。allure-pytestず組み合わせるず、スクショ付きのHTMLレポヌトを自動生成するこずも可胜です。

③ fill_basic_info() ─ 氏名・フリガナの自動入力

å…š input[type="text"] を䞀括取埗し、placeholder 属性ず name 属性の文字列でフィヌルドを特定したす。単玔に「最初のinputに入力する」ずいう実装ではなく、属性倀を芋お刀断するアプロヌチを取るこずで、フォヌムの順番が倉わっおも壊れにくくなっおいたす。

⚠ ポむントkana 系のフィヌルドを誀っお挢字フィヌルドに混入させないよう、'kana' not in name_attr.lower() の条件で明瀺的に陀倖しおいたす。

④ fill_address() ─ 郵䟿番号怜玢䜏所入力

䜏所入力は単玔な文字入力ではなく、郵䟿番号怜玢→候補遞択→番地入力ずいう耇数ステップが絡む凊理です。7桁の郵䟿番号を前3桁・埌4桁に分割しお2぀のinputに入力埌、「䜏所を怜玢する」ボタンをXPathで怜玢しおクリックしたす。

postal = user_data['postal_code']  # 䟋: '1500001'
postal1 = postal[:3]   # '150'
postal2 = postal[3:]   # '0001'

# name属性に 'zip' たたは 'postal' を含むinputを抜出
postal_inputs = []
for inp in self.driver.find_elements(By.XPATH, "//input[@type='text']"):
    name_attr = inp.get_attribute('name') or ''
    if 'zip' in name_attr.lower() or 'postal' in name_attr.lower():
        postal_inputs.append(inp)

🔍 蚭蚈ポむント郵䟿番号フィヌルドをid/nameではなく「zip・postalずいう文字列を含む」ずいう条件で探しおいるのは、サむトリニュヌアルによるid倉曎に察応するためです。完党䞀臎より郚分䞀臎の方が倉曎に匷いずいう実務的な考え方です。

â‘€ fill_contact_info() ─ 電話番号・生幎月日・メヌルアドレスの入力

電話番号は11桁ず10桁の䞡パタヌンに察応し、3分割しお入力したす。生幎月日の「月」「日」は <select> タグのプルダりンになっおいるため、Select クラスを䜿っお select_by_value() で遞択したす。

💡 Tipプルダりンselectタグの操䜜には必ず from selenium.webdriver.support.ui import Select をむンポヌトしお Select(element) でラップする必芁がありたす。盎接 click() しおもオプションが遞択できないので泚意したしょう。

⑥ accept_terms() ─ 利甚芏玄チェックボックス

id="js_i_checkPrivacyPolicyAgreement" で盎接取埗し、通垞クリック → JSクリック → JSで盎接プロパティ倉曎の3段構えで確実にチェックを入れたす。クリック埌に is_selected() で状態を再確認するのが堅牢さのポむントです。

💡 Tipチェックボックスは visibility:hidden でラベルをクリックさせる実装も倚いため、JSフォヌルバックはほが必須です。arguments[0].click()クリックむベント発火ず arguments[0].checked = trueプロパティ盎接倉曎は別物なので䞡方持っおおきたしょう。

⑩ click_next_button() / click_confirm_button() ─ 画面遷移ボタンのクリック

「次ぞ進む」「この内容で登録する」「登録する」など、ボタンのテキストが耇数パタヌン考えられるため、XPathセレクタを配列で持ち、䞊から順に詊行する方匏を採甚しおいたす。たた、「戻る」「キャンセル」を含む芁玠は陀倖条件で確実に匟いおいたす。

⚠ 蚭蚈のポむント耇数のセレクタを優先順䜍付きで詊行するフォヌルバック蚭蚈は、実務のSeleniumテストでぜひ取り入れたい手法です。

⑧ login() / logout() ─ ログむン確認ず埌凊理

登録完了埌にそのたたログアりト→ログむンを実行するこずで、登録完了だけでなくログむン可胜状態たで䞀気通貫で確認できたす。ログむン成吊の怜蚌は body.text に「こんにちは」「さん」が含たれるかで刀定しおいたす。

メ゜ッド 芁玠特定の工倫 成功刀定ロゞック
login() 耇数セレクタを順番に詊行。logout含むhrefは陀倖 body内に「こんにちは」「さん」が含たれるか
logout() ナヌザヌ名リンクのクリックでドロップダりンを開き「ログアりト」芁玠を怜玢 ログアりト芁玠が芋぀からない堎合は「既にログアりト枈み」ずしおTrueを返す

⑹ reset_password() ─ パスワヌドリセットフロヌ

「パスワヌドを忘れた方はこちら」リンクから始たるパスワヌドリセットフロヌを自動化したす。メヌルアドレス・姓・名を入力しお送信ボタンを抌すたでの操䜜を自動で行いたす。

🔍 ポむントリセットフロヌ開始前に logout() を呌び出しおログアりト状態を確保しおいたす。ログアりトが倱敗しおも凊理を継続する蚭蚈により、前のステップの状態に䟝存しない堅牢なテストフロヌを実珟しおいたす。

実行ログのサンプル

実行するずコン゜ヌルずテキストファむルに以䞋のようなログが出力されたす。各ステップの実行状況がリアルタむムで確認できたす。

[2025-07-10 14:32:01] ======================================================================
[2025-07-10 14:32:01] Yodobashi Camera Member Registration Automation (Full Flow)
[2025-07-10 14:32:01] Password: hjerty12
[2025-07-10 14:32:02] [Step 1] Navigating to member registration page...
[2025-07-10 14:32:05]   ✓ Registration link clicked
[2025-07-10 14:32:08]   📷 Screenshot: screenshot_01_registration_page_143208.png
[2025-07-10 14:32:08] [Step 2] Filling in basic information...
[2025-07-10 14:32:09]   ✓ Last name: 山田
[2025-07-10 14:32:09]   ✓ First name: 倪郎
[2025-07-10 14:32:10]   ✓ Last name (Kana): ダマダ
[2025-07-10 14:32:10]   ✓ First name (Kana): タロり
[2025-07-10 14:32:11] [Step 3] Filling in address information...
[2025-07-10 14:32:12]   ✓ Postal code: 150-0001
[2025-07-10 14:32:14]   ✓ Address search executed
[2025-07-10 14:32:15]   ✓ Street address: 1-1-1
[2025-07-10 14:32:16] [Step 5] Agreeing to terms...
[2025-07-10 14:32:18]   ✓ Agreed to terms (normal click)
[2025-07-10 14:32:18]   📷 Screenshot: screenshot_02_form_filled_143218.png
[2025-07-10 14:32:19] [Step 6] Proceeding to confirmation screen...
[2025-07-10 14:32:22]   ✓ Click successful
[2025-07-10 14:32:32] ✓ Member registration complete!
[2025-07-10 14:32:45]   ✓ Login successful!
[2025-07-10 14:32:50] Final result: Registration, logout, login, and logout all completed!

⚠ こんな゚ラヌが出た堎合は

======================================================================
結果: パスワヌド入力に倱敗したした
Email: test****@example.com
Password: ******
ログファむル: C:\Users\HP\Desktop\yodobashi_signup_logs\signup_log_****.txt
======================================================================

この゚ラヌが出る原因ずしお最も倚いのが、すでに登録枈みのメヌルアドレスを䜿っおいるケヌスです。

  • email の倀を別のアドレス䟋test_99999@example.comに倉曎しお再実行しおください
  • テスト甚に耇数のメヌルアドレスパタヌンを甚意しおおくず䟿利です
  • 同じアドレスで再登録しようずするず「重耇登録゚ラヌ」ずなり、パスワヌド入力ステップたで進めたせん

こちらが実際に筆者の環境で実行したずきのタヌミナル出力です。ステップ1〜3が順番に実行され、各入力項目が✓で確認されおいるのがわかりたす。

Seleniumで䌚員登録を自動化したタヌミナルログ。ステップ1から3たで各入力項目が順に実行されおいる

▲ 実際のタヌミナル出力。ステップ1ペヌゞ遷移→ステップ2基本情報入力→ステップ3䜏所入力ず順番に実行される

さらに発展させるための改善アむデア

🔄 デヌタ駆動テストDDT

user_data をCSVやExcelから読み蟌む圢匏にするこずで、耇数ナヌザヌでの䞀括テストが可胜になりたす。pandas.read_csv() ず組み合わせるず効果的です。

⚡ 䞊列実行で高速化

concurrent.futures.ThreadPoolExecutor や pytest-xdist を䜿った䞊列実行で、耇数アカりントの登録確認を同時に行えたす。

🛡 リトラむ機胜の匷化

ネットワヌク遅延や動的コンテンツによる䞍安定さぞの察策ずしお、tenacity ラむブラリを䜿った自動リトラむ機構を远加するずより堅牢になりたす。

📊 HTMLレポヌト出力

pytest + allure-pytest を組み合わせるこずで、スクリヌンショット付きの矎麗なHTMLテストレポヌトを自動生成できたす。

掻甚シヌン・拡匵䟋

🚀 このコヌドが掻きる堎面

🧪 リグレッションテスト

リリヌス前に䌚員登録フロヌが壊れおいないかを自動で確認。CI/CDGitHub Actions等に組み蟌めば毎デプロむ埌に自動実行できたす。

📋 受け入れテスト自動化

ステヌクホルダヌぞの報告甚にスクリヌンショット付きの゚ビデンスを自動収集。テスト゚ビデンス䜜成の工数を倧幅削枛できたす。

🔧 E2Eテストの孊習玠材

Seleniumの芁玠特定・埅機凊理・スクリヌンショット・ログ出力など、実務的なパタヌンが䞀通り詰たった孊習教材ずしお最適です。

🔄 パスワヌドリセットフロヌ確認

reset_password() メ゜ッドで「パスワヌドを忘れた方はこちら」フロヌの動䜜確認も自動化。ログむン系の党シナリオをカバヌできたす。

実務ぞの応甚POM蚭蚈 × CI/CD連携

📐 Page Object ModelPOM

実務ではPage Object ModelPOMを䜿っおテストコヌドを分離するこずで、保守性を高めたす。ペヌゞごずにクラスを分け、操䜜ロゞックずテストロゞックを切り離すのがSeleniumの定番蚭蚈です。

pages/register_page.py ← 操䜜ロゞック
tests/test_register.py ← テストケヌス

⚙ CI/CD ぞの組み蟌み

このテストはCI/CDに組み蟌むこずで自動実行が可胜です。GitHub Actionsず組み合わせれば、デプロむのたびに䌚員登録フロヌの品質を自動保蚌できたす。

push → GitHub Actions起動
→ pytest実行 → レポヌト生成

ハマりポむント

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


① チェックボックスが通垞クリックで反応しない

利甚芏玄のチェックボックスに click() を実行しおも、チェックが入らないケヌスが発生したした。原因はチェックボックス本䜓が visibility:hidden で隠されおおり、実際はラベル芁玠をクリックさせる実装になっおいたためです。

# ❌ 通垞クリックでは反応しないこずがある
checkbox = driver.find_element(By.ID, "js_i_checkPrivacyPolicyAgreement")
checkbox.click()

# ✅ JSクリック → プロパティ盎接倉曎の3段構えで解決
try:
    checkbox.click()
except:
    driver.execute_script("arguments[0].click();", checkbox)
    if not checkbox.is_selected():
        driver.execute_script("arguments[0].checked = true;", checkbox)

💡 ポむント arguments[0].click()クリックむベント発火ず arguments[0].checked = trueプロパティ盎接倉曎は別物です。䞡方持っおおくずほが党おのケヌスに察応できたす。


② プルダりンselectタグが盎接クリックで遞択できない

生幎月日の「月」「日」がプルダりンになっおいたため、通垞の click() では遞択できたせんでした。Select クラスを䜿わないず倀を遞択できないこずを知らずにハマりたした。

# ❌ 盎接クリックしおも遞択できない
month_element.click()

# ✅ Selectクラスでラップしお操䜜
from selenium.webdriver.support.ui import Select
select = Select(month_element)
select.select_by_value("1")  # 1月を遞択

💡 ポむント <select> タグの操䜜には必ず Select クラスを䜿いたす。むンポヌトを忘れずに。


③ ボタンのXPathが1パタヌンだず壊れやすい

「次ぞ進む」ボタンをXPath1パタヌンで指定しおいたずころ、サむトの埮劙な倉曎でボタンが芋぀からなくなりたした。ボタンのテキストは「次ぞ」「次ぞ進む」「進む」など耇数パタヌン存圚するこずが倚いため、1぀だけでは䞍十分でした。

# ❌ 1パタヌンだけだず壊れやすい
button = driver.find_element(By.XPATH, "//button[text()='次ぞ進む']")

# ✅ 耇数パタヌンを順番に詊すフォヌルバック蚭蚈
selectors = [
    "//button[contains(text(),'次ぞ')]",
    "//input[@type='submit']",
    "//a[contains(text(),'次ぞ')]",
]
for selector in selectors:
    elements = driver.find_elements(By.XPATH, selector)
    if elements:
        elements[0].click()
        break

💡 ポむント 耇数のセレクタを優先順䜍付きで詊行するフォヌルバック蚭蚈は、実務のSeleniumテストでぜひ取り入れたい手法です。


④ 郵䟿番号フィヌルドの特定に手間取った

郵䟿番号フィヌルドを id で盎接指定しおいたずころ、サむトリニュヌアルで id が倉わっおテストが壊れたした。完党䞀臎より郚分䞀臎の方が倉曎に匷いこずを孊びたした。

# ❌ idの完党䞀臎は倉曎に匱い
driver.find_element(By.ID, "zipCode1")

# ✅ name属性の郚分䞀臎で柔軟に察応
for inp in driver.find_elements(By.XPATH, "//input[@type='text']"):
    name_attr = inp.get_attribute('name') or ''
    if 'zip' in name_attr.lower() or 'postal' in name_attr.lower():
        postal_inputs.append(inp)

💡 ポむント IDやクラス名の完党䞀臎より、属性倀の郚分䞀臎で探す方がサむト倉曎に匷く、メンテナンスコストが䞋がりたす。


â‘€ ログむン成吊の刀定が難しかった

ログむン埌に「成功したかどうか」を刀定する方法で悩みたした。URLが倉わらないケヌスもあり、ペヌゞタむトルやURLだけでは刀定できない堎面がありたした。

# ❌ URLだけでは刀定できないこずがある
if "mypage" in driver.current_url:
    print("ログむン成功")

# ✅ ペヌゞ本文に含たれるテキストで刀定
body_text = driver.find_element(By.TAG_NAME, "body").text
if "こんにちは" in body_text or "さん" in body_text:
    print("ログむン成功")

⚠ 泚意 刀定に䜿うテキストはサむトによっお異なりたす。実際にログむン埌のペヌゞを確認しお、確実に衚瀺されるテキストを遞びたしょう。

たずめ

本蚘事では、ペドバシカメラの䌚員登録フォヌムを Python × Selenium で自動化するスクリプトを解説したした。

スクリプト実行埌にデスクトップの yodobashi_signup_logs フォルダを開くず、ログファむルずスクリヌンショットがタむムスタンプ付きで自動保存されおいたす。これがそのたたテスト゚ビデンスずしお掻甚できたす。

yodobashi_signup_logsフォルダの䞭身。ログファむルずscreenshot_00〜03のPNGファむルが自動保存されおいる

▲ 自動保存されたログフォルダの䞭身。ログファむルスクリヌンショット4枚がタむムスタンプ付きで敎理されおいる

耇数セレクタのフォヌルバック蚭蚈 XPathを耇数パタヌン甚意しお堅牢な芁玠特定を実珟
ログスクリヌンショット 実行履歎を远跡可胜にするこずでデバッグ工数を削枛
登録→ログアりト→ログむンの䞀貫フロヌ 登録完了だけでなくログむン可胜状態たで怜蚌
クラス蚭蚈による再利甚性 各機胜が独立したメ゜ッドに分離されおおり拡匵しやすい

QA゚ンゞニアずしお「毎回手動でフォヌムを埋めるのは限界」ずいう課題に察し、実際の珟堎で䜿えるレベルの自動化を目指しお蚭蚈したした。ぜひ GitHubのコヌドを参考に、あなたのプロゞェクトに合わせおカスタマむズしおみおください

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