概要
Seleniumでページの読み込みが終わらない現象が時々発生し、エラーとなってテスト実行が不安定となるため、リトライを試してみる。
ページの読み込み最大待ち時間の指定する
とりあえず、読み込みを待つ最大の時間をセットして、
ページ読み込みが終わらない場合は終了させる。
from selenium import webdriver
driver = webdriver.Chrome("D:\chromedriver")
driver.set_page_load_timeout(10) # 10秒
try:
driver.get("https://google.co.jp/")
print("The page was loaded in time!")
except:
print("time out!")
リトライ処理を実装する
ページの読み込みに失敗したら、リトライするように実装してみる。
#!/usr/bin/python
import unittest, time
from selenium.common.exceptions import TimeoutException
class TestHoge(unittest.TestCase):
RETRIES = 3
TIMEOUT = 10
"""初期化"""
def setUp(self):
self.browser = Browser()
"""テスト終了"""
def tearDown(self):
self.browser.quitBrowser()
"""PCサイト"""
def testPcSite(self):
# ブラウザ起動
self.browser.openChrome()
driver = self.browser.driver
driver.maximize_window() # 最大化
driver.implicitly_wait(2) # 暗黙の待機(2秒)
# ページの読み込み待ち時間(10秒)
driver.set_page_load_timeout(self.TIMEOUT)
i = 0
while i < self.RETRIES:
try:
driver.get("https://google.co.jp/")
time.sleep(5)
except TimeoutException:
i = i + 1
print("Timeout, Retrying... (%(i)s/%(max)s)" % {'i': i, 'max': self.RETRIES})
continue
else:
return True
msg = "Page was not loaded in time(%(second)s sec)." % {'second': self.TIMEOUT}
raise TimeoutException(msg)
##### MAIN #####
if __name__ == "__main__":
unittest.main()