一、前言
在進行web自動化測驗或者App端webview自動化測驗時,都會遇到切換標簽頁的場景,通常情況下使用WebDriverWait里面的一個方法,去等待一個新的標簽頁打開,然后切換至新的標簽頁,當有時出現例外,同時打開兩個標簽頁的時候就不能使用WebDriverWait里面的等待方法,
二、方式實作
1、通常解決標簽頁切換的方法是:
def switch_to_new_window(self, locator, timeout=30, poll_frequency=0.5):
# 獲取所有的視窗句柄
handles = self.driver.window_handles
# 點擊元素,打開新標簽頁
self.driver.find_element(*locator).click()
# 等待新的標簽頁生成
WebDriverWait(self.driver, timeout, poll_frequency=poll_frequency).until(EC.new_window_is_opened(handles))
# 切換至新打開的標簽頁
self.driver.switch_to.window(self.driver.window_handles[-1])
2、遇到的問題:
- 點擊某個元素后,先后生成兩個標簽頁;
- 生成的兩個標簽頁中,其中一個是空白頁,無任何內容;
- 空白頁有時生成快,有時慢,有時生成后還消失;

使用WebDriverWait里面的等待方法時,有時會切換至空白頁面,而且有時切換至空白頁后該頁面消失了,面對這種例外情況,只能根據例外現象重新去封裝一個切換方法,
def switch_to_new_window_wait(self, locator, timeout=30, frequcy=0.5):
# 獲取所有的視窗句柄
handles = self.driver.window_handles
# 點擊元素,打開新標簽頁
self.driver.find_element(*locator).click()
used_time = 0
while used_time < timeout:
# 點擊元素后獲取所有的視窗句柄
old_handles = self.driver.window_handles
time.sleep(frequcy)
# 等待之后再次獲取所有的視窗句柄
new_handles = self.driver.window_handles
# 比較等待前后視窗句柄是否相等
if old_handles == new_handles:
# 判斷是否有新的標簽頁生成
if handles[-1] != new_handles[-1]:
try:
self.driver.switch_to.window(new_handles[-1])
# 判斷是否進入了空白頁
if self.driver.current_url is None:
print("\n" + "進入了空白頁")
used_time += frequcy
continue
my_log.info("切換至新標簽頁成功")
return
except:
# 空白頁消失報錯,等待一定的時間
used_time += frequcy
continue
used_time += frequcy
my_log.error("切換至新標簽頁失敗!")
上面的方法就可以解決遇到的標簽頁切換問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296095.html
標籤:其他
