當前位置:
首頁 > 知識 > 練習篇27-多窗口之間切換

練習篇27-多窗口之間切換


《自動化測試系列教程》本系列教程系朋友學習自動化測試過程做的筆記。計劃60篇幅。


朋友原話:「我的寫文章的路線是,教程系列是 一步一步教你設計Python+Selenium自動化測試框架,其中包括4個部分(共計:60篇),基礎篇(5篇):主要告訴大家,Python+Selenium的運行環境怎麼搭建以及第一個demo案例


練習篇(32篇):主要告訴大家,xpath使用、怎麼定位頁面元素、根據頁面元素進行獲取。比如:如何獲取網頁中所有郵箱等。


中級篇,框架設計篇」。希望對想學自動話測試的朋友有所幫助。


如果您是第一次看到本系列教程,在文章末尾凱哥放有傳送門。傳送門記錄了從第1篇開始所發的所有文章。方便您直接查看。如果您不是第一次看本系列教程並且對自動化測試感興趣,歡迎關注凱哥。

正文:


本文來介紹如何處理driver在多窗口之間切換,想一下這樣的場景,在頁面A點擊一個連接,會觸發在新Tab或者新窗口打開頁面B,由於之前的driver實例對象在頁面A,但是你接下來的腳本是操作頁面B的元素,這樣就造成了找不到元素的報錯。本來介紹selenium中switch_to.window()方法來處理這個問題。


測試場景:打開百度新聞(頁面A),點擊熱點新聞中第一個新聞鏈接(一般是國家領導人的新聞),會在第二個窗口打開這個新聞的具體詳情頁(頁面B),測試需要去判斷你點擊這個這個新聞,在打開的詳情頁是否正確。


問題拆分:


1. 我們已經知道switch_to.window()方法可以處理窗口切換的問題


2. 在頁面A跳轉到頁面B之前,我們需要用一個變數保存這個新聞的標題


3. 切換到頁面B後,我們獲取這個新聞標題,然後和前面這個變數保存的值去對比,如果相等,那麼就測試通過。


我們分兩個步驟去解答這個測試需求:


1. 先實現頁面A切換到頁面B


2. 頁面A和頁面B兩個新聞標題進行對比

先看看窗口切換的腳本代碼:



練習篇27-多窗口之間切換



# coding=utf-8


import time


from selenium import webdriver


driver = webdriver.Chrome()


driver.maximize_window()


time.sleep(1)


driver.find_element_by_xpath("//*[@id="pane-news"]/div/ul/li[1]/strong/a").click()

print driver.current_window_handle # 輸出當前窗口句柄


handles = driver.window_handles # 獲取當前全部窗口句柄集合


print handles # 輸出句柄集合


for handle in handles:# 切換窗口


if handle != driver.current_window_handle:


print "switch to second window",handle


driver.close() # 關閉第一個窗口


driver.switch_to.window(handle) #切換到第二個窗口


代碼解釋:


1. 先列印當前窗口(頁面A)句柄,一個長字元串

2. 獲取全部窗口句柄,這裡我們有兩個,列印出這兩個句柄。


3. for 循環遍歷,當發現其中一個句柄和當前句柄不相等,這裡做了三件事,第一件,列印一個語句,告訴你馬上要切換到第二個窗口,第二件,關閉當前窗口,這裡指頁面A,第三,切換到頁面B窗口。


這裡在切換到第二個頁面時候,我關閉之前的頁面A,只是我個人測試習慣,你可以不關閉,但是你的要思路清晰,哪些元素在頁面A還是在頁面B,如果操作了頁面B後還要操作頁面A的元素,你還要切換到頁面A,為了麻煩,建議你每次切換都把前面頁面給關閉。


判斷在打開新頁面顯示的新聞標題是不是你剛剛點擊的新聞,腳本代碼如下:



練習篇27-多窗口之間切換



# coding=utf-8


import time


from selenium import webdriver


driver = webdriver.Chrome()

driver.maximize_window()


time.sleep(1)


news_link = driver.find_element_by_xpath("//*[@id="pane-news"]/div/ul/li[1]/strong/a")


page1_title_string = news_link.text #得到頁面A新聞標題


news_link.click() # 點擊新聞鏈接


time.sleep(1)


handles = driver.window_handles


for handle in handles:# 切換窗口(切換到搜狗)


if handle != driver.current_window_handle:


print "switch to second window",handle

driver.close() # 關閉第一個窗口


driver.switch_to.window(handle) #切換到第二個窗口


page2_title_string = driver.find_element_by_xpath("//*[@id="yc_con_txt"]/p[1]").text # 詳情頁有一個原標題


try :


assert page1_title_string in page2_title_string # 判斷頁面B標題是否包含頁面A標題


print ("Test Pass.")


except Exception as e:


print ("Test Fail")


注意:很有可能遇到,頁面A的標題是簡短,頁面B的標題是長標題,這個時候就需要採取,字元串包含的關係去斷言,我這裡剛好打開的詳情頁有一個叫 「原標題:xxxx」,由於這個新聞具有時效性,等你看這篇文章,可能腳本運行不成功,需要調整下腳本,如果不好斷言,就放棄斷言部分,本文只學窗口切換,至於測試斷言技能,需要你不斷去寫腳本,去掌握和提高的部分。


傳送門:

練習篇26-執行JavaScript


練習篇之25-滑鼠右鍵


練習篇之24-組合鍵-退格鍵刪除文字


練習篇23-組合鍵-全選文字


練習篇22-獲取頁面元素大小


練習篇21-驗證控制項是否被選中


練習篇20-獲取元素上面的文字


.........................


更多

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 凱哥java 的精彩文章:

練習篇26-執行JavaScript

TAG:凱哥java |