1. 程式人生 > >python中如何切換視窗並且在新視窗中定位元素

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

前兩天在自動化測試學習中遇到了一個問題,從當前頁面點選連結到新視窗,然後判斷新視窗的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()所放置的位置,為什麼放在這裡,假如放在其他地方會怎麼樣,加入不放會怎麼樣,嘗試幾次

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