我們在做UI自動化時,不得不會遇到一些窗口跳轉與彈框,在這種的時候如果不進行切換的話,繼續執行腳本必然會報錯,所以我們就需要用到切換窗口的方法。
selenium中主要是三種窗口Windows窗口、iframe窗口、alert窗口,前面已經介紹過iframe和alert彈窗的切換,本節只介紹切換windows窗口。
這類窗口也就是我們常說的句柄,句柄的切換是有必要的,我們自己手動在網頁上從操作的話,產生新的句柄時瀏覽器會自動的幫我們跳轉到最新的句柄處,但是我們在做UI自動化的時候,代碼並不會幫我們自動的切換到最新的句柄,需要我們使用代碼去進行切換
步驟:
1.獲取當前所有的窗口
windows=driver.window_handles
2.切換到指定的窗口
driver.switch_to.window(windows[-1])
3.切回原來的窗口
driver.switch_to.window(windows[0])
4.獲取當前窗口的句柄
driver.current_window_handle
示例代碼
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get("http://www.baidu.com")
handles=driver.window_handles driver.find_element(By.ID, "kw").send_keys("騰訊課堂") driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)
以上的代碼腳本,就會產生一個新的Windows窗口
我們如果直接去執行下一步操作的話,會報錯的,所以我們需要先跳轉到新的窗口才行
需要加上以下代碼:
WebDriverWait(driver,10).until(EC.new_window_is_opened(handles))#等待新窗口出現
windows = driver.window_handles # 獲取該會話所有的句柄 driver.switch_to.window(windows[-1]) # 跳轉到最新的句柄
然后我們就可以在這個窗口里面進行新的操作了
注意:等待條件new_window_is_opened(handles)中是根據當前句柄數的變化來判斷的,所以老的handles必須在窗口新增前就定義。