python中如何切換視窗並且在新視窗中定位元素
阿新 • • 發佈:2019-01-24
前兩天在自動化測試學習中遇到了一個問題,從當前頁面點選連結到新視窗,然後判斷新視窗的h1中的標題跟連結文字是否匹配的測試。
在這個過程中需要解決得問題有:
1、遍歷當前頁的所有文字連結
2、定位第二個視窗的元素進行斷言匹配
1.首先獲取所有的文字連結放到list列表中,通過點選(click方法)開啟第二個視窗
2.通過迴圈語句來進行遍歷,並且斷言
在遍歷過程中我就遇到了一個新視窗的問題開啟第二個視窗後,一直定位不到第二個視窗內的元素,後來發現了問題,是我沒有定位到該視窗,所以定位第二個視窗的元素肯定定位不到,所以需要用一個switch_to_window(handle名稱)方法來定位到該視窗,但是定位到改視窗後,由於與需要for迴圈遍歷,當時我沒有想到關閉這個新開啟的視窗,用for迴圈的時候就出現問題了,一直有新出的視窗開啟在我用的if判斷中對handle的判斷混亂,從而導致我的for迴圈中的新視窗的定位出問題。下面看是我解決後的程式碼,建議先自己想想如何實現該過程,犯過錯之後才知道,錯誤的來源,才能學到知識,時間出真知,能想出比我更好的解決方法。
# coding = utf-8 import time from selenium import webdriver driver=webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(2) #開啟網址 driver.get("http://bbs.xiaomi.cn/") time.sleep(1) #將文字連結放入列表中 title_li=driver.find_elements_by_xpath("//ul/li[@class='theme_list clearfix']//div[@class='title']//a") print('列表共有:',len(title_li),'個元素') #開始遍歷文字連結 for i in range(0,len(title_li)): handlea=driver.current_window_handle # 獲取當前頁,將當前頁面A賦給handlea #列印當前頁A的連結文字 atxt=title_li[i].text print(atxt) title_li[i].click()#點選文字連結 time.sleep(1) handleb= driver.current_window_handle # 獲取當前頁,當前頁面B賦給handleb sreach_windows = driver.window_handles #將當前所有handle放入列表中 ''' 新建newhandle為search_windows內的元素 判斷newhandle是不是頁面A如果不是就定位到newhandle 也就是頁面B ''' for newhandle in sreach_windows: if (newhandle != handlea): driver.switch_to_window(newhandle) h_title = driver.find_element_by_xpath("//h1/span[3]") #定位頁面B中的h1內的標題名稱 print(h_title.text) #斷言文字是否匹配,如果匹配則pass,否則fail try: assert atxt == h_title.text print("pass") except Exception as e: print("fail") ''' 這是最關鍵的一步,在這裡必須關閉新的頁面,及頁面B 否則在迴圈遍歷中或出現瘋狂開啟新頁面的情況 所以必須用close方法關閉視窗 ''' driver.close() driver.switch_to_window(sreach_windows[0]) #重新定位到頁面A time.sleep(1) driver.quit()
思考:
1、獲取當前頁A、B的位置,與click()方法的位置關係,變動變動位置會發生什麼情況
1、sreach_windows = driver.window_handles所防止的位置,為什麼要放在這裡,這是我當時有犯過的錯誤
2、driver.close()所放置的位置,為什麼放在這裡,假如放在其他地方會怎麼樣,加入不放會怎麼樣,嘗試幾次
個人的學習筆記,僅供參考,希望有問題下方評論提問,或者有建議的下方評論提出,我會第一時間回覆大家,謝謝