1、多表單切換
在Web應用中經常會遇到frame/iframe表單嵌套頁面的應用,WebDriver只能在一個頁面上對元素識別與定位,對於frame/iframe表單內嵌頁面上的元素無法直接定位。這時就需要通過switch_to.frame()方法將當前定位的主體切換為frame/iframe表單的內嵌頁面中
126郵箱登錄框的結構大概是這樣子的,想要操作登錄框必須要先切換到iframe表單。
switch_to.frame() 默認可以直接取表單的id 或name屬性。如果iframe沒有可用的id和name屬性,則可以通過下面的方式進行定位。
除此之外,在進入多級表單的情況下,還可以通過switch_to.default_content()跳回最外層的頁面
2、多窗口切換
在web頁面操作過程中,會遇到多個窗口之間的切換,webdriver提供了switch_to_window()方法,實現多個窗口之間的切換
下面以百度的登錄注冊頁面為例:
主要用到的方法有:
current_window_handl:獲得當前窗口句柄
window_handles:返回所以窗口的句柄到當前會話
switch_to_window():切換窗口函數,與前面講的swit_to.frame()相似
實例源碼:
#coding=utf-8 from selenium import webdriver import time #訪問百度 driver=webdriver.Firefox() driver.get("http://www.baidu.com") #獲取百度搜索窗口句柄 search_windows=driver.current_window_handle driver.find_element_by_link_text(u'登錄').click() driver.find_element_by_link_text(u'立即注冊').click()
#獲取打開所有窗口句柄 all_handles=driver.window_handles #進入注冊窗口 for handle in all_handles: if handle !=search_windows: driver.switch_to_window(handle) print("now regester window") driver.find_element_by_id('TANGRAM__PSP_3__userName').send_keys('namejianjain') time.sleep(3) for handle in all_handles: if handle==search_windows: driver.switch_to_window(handle) print("now search window") time.sleep(3) driver.find_element_by_id("TANGRAM__PSP_4__closeBtn").click() time.sleep(3) driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click() time.sleep(5) driver.close()
腳本執行過程中:先打開百度搜索頁面,然后點擊【登錄】;
進入登錄頁面,在登錄頁面點擊【馬上注冊】;
進入注冊頁面,在注冊頁面輸入賬號后;返回百度搜索頁面,搜索內容,顯示出搜索的內容