【5分で完了】Selenium×Python環境構築|pytest+webdriver-managerで詰まらない方法

テスト自動化

Selenium × Pythonの環境構築を、初心者でも5分で動作確認までできるように解説します。

👉 この記事のコードをそのままコピペすれば、5分でテストが動きます。

「ChromeDriverのバージョンが合わない」「環境構築で詰まる」——そんな悩みを解決します。

本記事では、Selenium・webdriver-manager・pytestを使った実務構成で、エラーなく最短でテストを動かす方法を解説します。

👉 Playwrightとの違い:SeleniumはWebDriver経由でブラウザを操作する成熟した技法で、Playwrightより求人・案件数が圧倒的に多いです。

💡 この記事でできるようになること
Selenium × Python × pytest の環境を構築し、Googleにアクセスするテストが動くところまで持っていく

💡 他の記事との違い

多くの記事は「ChromeDriverを手動ダウンロード」する手順ですが、本記事では webdriver-manager を使って完全自動化しています。そのため、バージョン不一致で詰まることがありません。

Seleniumの環境構築でよくある失敗は「ChromeDriverのバージョンが合わない」「パスが通っていない」の2つです。この記事ではWebDriver Managerを使ってバージョン管理を自動化するため、詰まらずに進められます。

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

  • Selenium × Pythonの環境構築を初めてやる方
  • ChromeDriverのバージョン管理で詰まった経験がある方
  • pytestと組み合わせてテスト自動化を始めたい方
  • UpworkでQA案件を取るためにSeleniumを習得したい方

✅ この記事を読むと得られること

  • Python仮想環境・Selenium・WebDriver Managerのインストール手順がわかる
  • ChromeDriverのバージョン管理を自動化する方法がわかる
  • pytestとSeleniumを組み合わせた基本的なテストの書き方がわかる

👤 この記事を書いた人

QAエンジニア・テスト自動化エンジニアとして15年以上の実務経験を持つ Yoshi が執筆。Seleniumは実務で毎日使っており、ChromeDriverのバージョン問題で詰まった経験から、WebDriver Manager導入を標準としています。実装コードはGitHubで公開中:github.com/YOSHITSUGU728/automated-testing-portfolio

Selenium × Python 環境構築の全体像

まず全体の流れを把握してから進めましょう。

🗺️ 環境構築の全体フロー

1Python インストール確認python –version で確認
2仮想環境(venv)の作成プロジェクトごとに依存関係を分離
3Selenium・WebDriver Manager インストールpip install で一括インストール
4pytest インストールテスト実行フレームワーク
5動作確認テストを実行Googleにアクセスして title を確認

STEP 1:Pythonのバージョン確認(Selenium環境構築の前提)

まず Python がインストールされているか確認します。

python --version
# または
python3 --version

出力例:

Python 3.11.5
⚠️ Python 3.8以上を推奨します。3.7以下は Selenium 4系で一部動作しない場合があります。Pythonが入っていない場合は python.org からインストールしてください。

STEP 2:仮想環境(venv)の作成と有効化【Python環境構築】

仮想環境を使うことでプロジェクトごとにパッケージを分離できます。実務では必ず使いましょう。

仮想環境の作成

# プロジェクトフォルダを作成
mkdir selenium-project
cd selenium-project

# 仮想環境を作成
python -m venv venv

仮想環境の有効化

OSコマンド
Windowsvenv\Scripts\activate
Mac / Linuxsource venv/bin/activate

有効化されると、プロンプトの先頭に (venv) と表示されます。

(venv) $ 

STEP 3:Selenium・webdriver-manager・pytestのインストール方法(Selenium Python インストール)

Selenium 4系では webdriver-manager を使うことで ChromeDriver のバージョン管理が自動化されます。手動ダウンロードは不要です。

pip install selenium webdriver-manager pytest

インストール確認:

pip list | grep -E "selenium|webdriver|pytest"

# 出力例
pytest             7.4.0
selenium           4.18.1
webdriver-manager  4.0.1
💡 実務Tip:インストールしたパッケージは pip freeze > requirements.txt で保存しておきましょう。チームメンバーが pip install -r requirements.txt で同じ環境を再現できます。
💡 補足:実務では VS Code などのエディタを使うとコード補完・デバッグが快適になり効率が大幅に上がります。拡張機能「Python」「Pylance」を入れておくのがおすすめです。

STEP 4:プロジェクト構成の作り方(pytest構成)

実務で使いやすいフォルダ構成を最初から整えておきます。

selenium-project/
├── venv/                  # 仮想環境(Gitには含めない)
├── tests/
│   ├── conftest.py        # fixture定義
│   └── test_sample.py     # テストファイル
├── requirements.txt       # 依存パッケージ一覧
└── pytest.ini            # pytest設定

pytest.ini の作成

[pytest]
testpaths = tests
addopts = -v

STEP 5:Selenium WebDriverの設定(conftest.py)

WebDriver の初期化・終了処理を conftest.py の fixture に集約するのが実務のベストプラクティスです。

# tests/conftest.py
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

@pytest.fixture(scope="function")
def driver():
    """Chrome WebDriverを起動・終了するfixture"""
    options = webdriver.ChromeOptions()
    # options.add_argument("--headless")  # 最初はオフ推奨(画面を見ながら確認できる)
    # CI/CD環境では上の行をオンにする
    options.add_argument("--no-sandbox")           # Linux/CI環境用(ローカルでは不要)
    options.add_argument("--disable-dev-shm-usage") # Linux/CI環境用(ローカルでは不要)
    options.add_argument("--window-size=1920,1080")

    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=options)

    yield driver  # テスト実行

    driver.quit()  # テスト終了後にブラウザを閉じる

💡 ポイント

  • 最初は --headless をオフにすることを推奨します。ブラウザが実際に動く様子を目で確認できるため、デバッグが格段に楽になります
  • 動作確認が取れたら --headless をオンにしてCI/CD環境に対応しましょう
  • scope="function" はテストごとにブラウザを起動・終了します。テスト間の状態汚染を防げる最も安全な設定です

STEP 6:動作確認テストの書き方と実行方法(pytest)

安定して動く example.com を使った動作確認テストです。GoogleはCAPTCHAやリダイレクトが発生する場合があるため、環境構築の最初の確認には example.com が最適です。

# tests/test_sample.py
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def test_example_title(driver):
    """example.comのタイトルが正しく取得できるか確認"""
    driver.get("https://example.com")
    assert "Example Domain" in driver.title

def test_example_heading(driver):
    """example.comの見出しが表示されるまで待機して確認(実務レベルの書き方)"""
    driver.get("https://example.com")
    # WebDriverWait:要素が表示されるまで最大10秒待機(実務必須)
    # visibility_of_element_located = DOMにあり、かつ画面に表示されていることを確認
    heading = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.TAG_NAME, "h1"))
    )
    assert heading.is_displayed()

💡 実務Tip:WebDriverWait を使う理由

  • driver.find_element() だけだと要素が表示される前にアクセスして NoSuchElementException が発生することがあります
  • visibility_of_element_located(DOMにあり+画面に表示)が最も確実。presence_of_element_located(DOMにあるだけ)より本質的なテストができます
  • 環境構築が完了したら、次のステップとしてこの待機処理を覚えておきましょう

テストの実行

pytest

実行結果サンプル

========================== test session starts ==========================
platform darwin -- Python 3.11.5, pytest-7.4.0, selenium-4.18.1
collected 2 items

tests/test_sample.py::test_example_title    PASSED  [ 50%]
tests/test_sample.py::test_example_heading  PASSED  [100%]

========================== 2 passed in 3.21s ===========================
✅ 2 passed と表示されれば環境構築完了です!ChromeDriver のダウンロードは webdriver-manager が自動で行うので手動操作は不要です。

⚠️ よくあるエラーと解決策

① SessionNotCreatedException: Chrome version mismatch

ChromeとChromeDriverのバージョンが合っていないエラーです。

# 解決策:webdriver-managerを使っていれば自動解決
# キャッシュが古い場合は削除して再インストール
pip install --upgrade webdriver-manager

② ModuleNotFoundError: No module named ‘selenium’

仮想環境が有効化されていないか、仮想環境外にインストールされています。

# 解決策:仮想環境を有効化してから再インストール
source venv/bin/activate  # Mac/Linux
venv\Scripts\activate     # Windows
pip install selenium webdriver-manager

③ テストが収集されない(collected 0 items)

ファイル名・関数名が test_ で始まっていない可能性があります。

# NG
def check_google(driver):  # test_ がない

# OK
def test_google_title(driver):  # test_ が必要

④ TimeoutException / NoSuchElementException

要素が表示される前にアクセスしようとしています。明示的な待機を追加しましょう。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 最大10秒待機して要素が表示されるまで待つ
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.NAME, "q"))
)

📖 Seleniumの基本をまだ理解していない方はこちらSelenium vs Playwright vs pytest|Pythonテスト自動化ツールの選び方

SeleniumとPlaywrightの使い分けとは?

どちらを選ぶか迷う方向けに整理します。

比較項目SeleniumPlaywright
歴史・実績2004年〜。業界標準2020年〜。新しめ
求人・案件数圧倒的に多い増加中
セットアップやや複雑(Driver必要)シンプル(自動DL)
実行速度やや遅い速い
対応ブラウザChrome・Firefox・Edge・SafariChrome・Firefox・WebKit
おすすめシーン既存プロジェクト・Upwork案件新規プロジェクト・モダン開発
💡 実務での結論:Upworkや既存プロジェクトのメンテナンスでは Selenium が必須。新規プロジェクトなら Playwright の方が効率が高い。両方できると市場価値が上がります。

FAQ

Q. Selenium 3系と4系の違いは?

Selenium 4(2021年リリース)から WebDriver の管理方法が変わり、ChromeDriverの指定方法が変わりました。この記事はSelenium 4系を前提にしています。Selenium 3系のコードを見ると webdriver.Chrome(executable_path=...) という書き方が多いですが、4系では非推奨です。webdriver-managerを使えばどちらも対応できます。

Q. ヘッドレスモードとは何ですか?

ブラウザウィンドウを表示せずにバックグラウンドでテストを実行するモードです。CI/CD環境(GitHub Actions等)ではディスプレイがないためヘッドレスが必須です。ローカル開発時は --headless を外すと実際のブラウザ操作が見えるのでデバッグに便利です。

Q. Firefoxでも使えますか?

使えます。webdriver-manager は GeckoDriver(Firefox用)にも対応しています。from webdriver_manager.firefox import GeckoDriverManager を使うことでFirefoxでも同じように自動管理できます。

実務では、webdriver-manager を使った ChromeDriver 自動管理を標準にしています。かつては ChromeDriver を手動ダウンロードしてバージョンが合わず詰まる案件が多かったですが、webdriver-manager 導入後は環境構築でのトラブルがほぼゼロになりました。新しくプロジェクトを始める際は必ずこの構成を採用しています。

この記事の手順通りに進めれば、環境構築で詰まることはありません。万が一エラーが出た場合は上の「よくあるエラーと解決策」を参照してください。

📋 この記事のまとめ

  • Selenium × Python環境構築は venv → pip install → conftest.py → テスト実行の5ステップ
  • webdriver-manager を使うことで ChromeDriver のバージョン管理が自動化され詰まらない
  • WebDriver の初期化・終了は conftest.py の fixture に集約するのが実務のベストプラクティス
  • --headless オプションでCI/CD環境にも対応できる
  • Seleniumは求人・案件数が最も多いツールなのでUpwork案件獲得に直結する

まずは pytest で2つのテストが PASSED になることを確認しましょう。環境が動いてしまえば、あとはテストケースを追加していくだけです。次のステップとして、ログインフォームのバリデーションテストや Page Object Model パターンの実装に進んでみてください。

タイトルとURLをコピーしました