selenium+Python(表單、多窗口切換)


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()

腳本執行過程中:先打開百度搜索頁面,然后點擊【登錄】;

                            進入登錄頁面,在登錄頁面點擊【馬上注冊】;

                            進入注冊頁面,在注冊頁面輸入賬號后;返回百度搜索頁面,搜索內容,顯示出搜索的內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM