目次

セットアップ

webdriverは、現在利用しているブラウザとバージョンを合わせる必要がある。

仮にこの記事ではc:\binフォルダを作成し

環境変数のPATHで上記のパスを追加した。

基本コード

簡単なサンプルコードを示す

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ヘッドレスモードのオプションを設定
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')  # GPUハードウェアアクセラレーションを無効化

# ChromeドライバーのパスをServiceオブジェクトとして指定
service = Service('c:\\bin\\chromedriver.exe')

# Serviceオブジェクトを使用してChromeドライバーのインスタンスを作成
# driver = webdriver.Chrome(service=service)
driver = webdriver.Chrome(service=service, options=options)

# ウェブサイトにアクセス
driver.get('https://www.yahoo.co.jp/')

search_box = driver.find_element(By.NAME, 'p')
search_box.send_keys('Python')
search_box.send_keys(Keys.RETURN)

# 検索結果ページの特定の要素(例えば、特定のクラス名を持つ要素)が表示されるまで待機
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'sw-CardBase'))  # Yahoo Japan検索結果ページの特定のクラス名
)

# ページの高さを取得
total_height = driver.execute_script("return document.body.parentNode.scrollHeight")

# ウィンドウサイズをページの高さに合わせる
driver.set_window_size(1920, total_height)

# スクリーンショットの取得と保存
driver.save_screenshot('screenshot.png')

# ウェブページのタイトルを取得して表示
print(driver.title)

# ブラウザを閉じる
driver.quit()

テスト用にブラッシュアップする

実行方法

pythonの標準テストフレームワークであるunittestは以下のコマンドラインでテスト可能である。

すべてのテストケースの実行方法

テストケースのあるフォルダで、

python -m unittest

部分的なテストケースの実行方法

上記のコマンドに続けて、以下のように記載する

python -m unittest test_yahoo_search.YahooSearchTest

テストコードのベースクラス

test_base.pyとして保存

import unittest
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

class TestBase(unittest.TestCase):
    def setUp(self):
        # ヘッドレスモードでChromeを起動するためのオプションを設定
        options = Options()
        options.add_argument('--headless')
        options.add_argument('--disable-gpu')
        service = Service('c:\\bin\\chromedriver.exe')
        self.driver = webdriver.Chrome(service=service, options=options)

    def take_screenshot(self, test_method_name):
        # 現在の時刻を取得してタイムスタンプを作成
        timestamp = time.strftime("%Y%m%d-%H%M%S")
        # スクリーンショットの保存ディレクトリを作成(存在しない場合)
        directory = f'screenshots/{test_method_name}'
        if not os.path.exists(directory):
            os.makedirs(directory)
        # スクリーンショットのファイル名を設定して保存
        screenshot_file = f'{directory}/screenshot-{timestamp}.png'
        self.driver.save_screenshot(screenshot_file)
    def take_screenshot_defaultsize(self, test_method_name):
        # ウィンドウサイズを合わせる
        driver.set_window_size(1920, 1080)  
        self.driver.save_screenshot(screenshot_file)
    def take_screenshot_allheight(self, test_method_name):
        # ページの高さを取得
        total_height = driver.execute_script("return document.body.parentNode.scrollHeight")
        # ウィンドウサイズをページの高さに合わせる
        driver.set_window_size(1920, total_height)        
        take_screenshot(self, test_method_name)     

    def tearDown(self):
        # ブラウザを閉じる
        self.driver.quit() 

テストベースを利用したテストケース

テストベースを利用することで、テストで使う共通処理を再利用できる

test_yahoo_search.py

 from test_base import TestBase
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class YahooSearchTest(TestBase):
    def test_search_in_yahoo_japan(self):
        # Yahoo Japanのページにアクセス
        self.driver.get('https://www.yahoo.co.jp/')
        # 検索ボックスを見つけて、キーワードを入力して検索を実行
        search_box = self.driver.find_element(By.NAME, 'p')
        search_box.send_keys('Python')
        search_box.send_keys(Keys.RETURN)
        # 検索結果が表示されるのを待機
        WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'sw-CardBase'))
        )
        # スクリーンショットを取得して保存
        self.take_screenshot_allheight(self.__class__.__name__ + '.' + self._testMethodName)
        # その他のテストコード...

# その他のテストケース...

git bashで文字化けする場合の対応方法

pythonをgitbashで使うと、windowsの場合は文字化けしていが、修正方法がある。しかし、よくネットで出てくる修正方法が古いのか、今時点での修正方法はコントロールパネルの地域からβ版扱いのオプションにチェックを入れる必要がある。

スクリーンショット 2023-12-10 115206.png

スクリーンショット 2023-12-10 115425.png


添付ファイル: fileスクリーンショット 2023-12-10 115425.png 11件 [詳細] fileスクリーンショット 2023-12-10 115206.png 11件 [詳細]
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-12-10 (日) 15:03:27 (74d)