以下の3つの方法を見つけます。
readyState
ページreadyStateを確認しています(信頼できません):
def page_has_loaded(self):
self.log.info("Checking if {} page is loaded.".format(self.driver.current_url))
page_state = self.driver.execute_script('return document.readyState;')
return page_state == 'complete'
wait_for
ヘルパー関数は良いですが、残念ながらclick_through_to_new_page
、ブラウザは、クリックの処理を開始する前に、我々は古いページのスクリプトを実行するには管理競合状態に開放され、page_has_loaded
ちょうどすぐにtrueを返します。
id
新しいページIDと古いページIDの比較:
def page_has_loaded_id(self):
self.log.info("Checking if {} page is loaded.".format(self.driver.current_url))
try:
new_page = browser.find_element_by_tag_name('html')
return new_page.id != old_page.id
except NoSuchElementException:
return False
IDの比較は、古くなった参照例外を待つほど効果的ではない可能性があります。
staleness_of
staleness_of
メソッドの使用:
@contextlib.contextmanager
def wait_for_page_load(self, timeout=10):
self.log.debug("Waiting for page to load at {}.".format(self.driver.current_url))
old_page = self.find_element_by_tag_name('html')
yield
WebDriverWait(self, timeout).until(staleness_of(old_page))
詳しくは、ハリーのブログをご覧ください。