1. 程式人生 > 其它 >UI自動化測試:異常標籤頁切換

UI自動化測試:異常標籤頁切換

一、前言

在進行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("切換至新標籤頁失敗!")

上面的方法就可以解決遇到的標籤頁切換問題。