python中如何切換窗口並且在新窗口中定位元素

前兩天在自動化測試學習中遇到了一個問題,從當前頁面點擊鏈接到新窗口,然後判斷新窗口的h1中的標題跟鏈接文字是否匹配的測試。

在這個過程中需要解決得問題有:

1、遍歷當前頁的所有文字鏈接

2、定位第二個窗口的元素進行斷言匹配

這裏以小米社區爲例(http://bbs.xiaomi.cn/),來說明解決方法

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()所放置的位置,爲什麼放在這裏,假如放在其他地方會怎麼樣,加入不放會怎麼樣,嘗試幾次

 

個人的學習筆記,僅供參考,希望有問題下方評論提問,或者有建議的下方評論提出,我會第一時間回覆大家,謝謝

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章