目次

セットアップ

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

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

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

基本コード

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

test_base.pyとして保存

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()

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

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

test_yahoo_search.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() 

TestBase?を利用したテストケース

 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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS