* 目次 [#z23d6087]
#contents
* セットアップ [#sbf0d636]
webdriverは、現在利用しているブラウザとバージョンを合わせる必要がある。

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

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


* 基本コード [#n0139e9b]
簡単なサンプルコードを示す


 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()
 
* テスト用にブラッシュアップする [#j4a4e5e3]
** 実行方法 [#t25d5e38]
pythonの標準テストフレームワークであるunittestは以下のコマンドラインでテスト可能である。

*** すべてのテストケースの実行方法 [#b20cd0fe]
テストケースのあるフォルダで、
 python -m unittest

*** 部分的なテストケースの実行方法 [#n99e4223]
上記のコマンドに続けて、以下のように記載する

 python -m unittest test_yahoo_search.YahooSearchTest


** テストコードのベースクラス [#s5bea9f6]

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() 
 
** テストベースを利用したテストケース [#n8ed68a5]

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

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

&ref(スクリーンショット 2023-12-10 115206.png);


&ref(スクリーンショット 2023-12-10 115425.png);
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS