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()
腳本執行過程中:先打開百度搜索頁面,然后點擊【登錄】;
進入登錄頁面,在登錄頁面點擊【馬上注冊】;
進入注冊頁面,在注冊頁面輸入賬號后;返回百度搜索頁面,搜索內容,顯示出搜索的內容
