UI自動化測試:異常標籤頁切換
阿新 • • 發佈:2021-08-30
一、前言
在進行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("切換至新標籤頁失敗!")
上面的方法就可以解決遇到的標籤頁切換問題。