Selenium2+python自動化13-多視窗、控制代碼(handle)

來源:互聯網
上載者:User

標籤:百度   print   selenium   指令碼   rom   inf   list   搜尋方塊   ref   

前言   

有些頁面的連結開啟後,會重新開啟一個視窗,對於這種情況,想在新頁面上操作,就得先切換視窗了。擷取視窗的唯一標識用控制代碼表示,所以只需要切換控制代碼,我們就能在多個頁面上靈活自如的操作了。

本篇以開啟百度新聞頁面搜尋按鈕上的連結頁面為例,依次開啟每個按鈕,並實驗室檢驗結果。用指令碼大量操作,可以減少重複勞動,重複的事情讓指令碼去執行吧!

一、定位一組元素

    1.開啟百度新聞頁面:17http://news.baidu.com/17

    2.定位搜尋方塊上一排按鈕網頁、貼吧,知道等

    3.定位一組元素方法在第八篇已經講過,這裡就不多講,通過firebug可以查看他們有共同屬性標籤為a,且有個老爸為:<div class="tab">

 

二、擷取當前視窗控制代碼

    1.當點擊百度新聞頁面上“網頁”按鈕時,會開啟一個新的視窗

    2.人為操作的話,可以通過點擊視窗切換到不同的視窗上,但是指令碼它不知道你要操作哪個視窗,這時候只能擷取視窗唯一的標識:控制代碼

    3.擷取當前頁面的控制代碼:driver.current_window_handle

1470719326447960.png903x456 15.6 KB


三、擷取所有控制代碼

    1.先通過css定位到所有按鈕:".tab>a"

    2.從定位的一組中隨便取一個點擊開啟

    3.然後擷取當前頁面的所有控制代碼,發現此時有兩個了

 

四、切換控制代碼

    1.迴圈判斷是否與首頁控制代碼相等

    2.如果不等,說明是新頁面的控制代碼

    3.擷取的新頁面控制代碼後,可以切換到新開啟的頁面上

    4.列印新頁面的title,看是否切換成功


五、關閉新視窗,切回首頁

    1.開啟新頁面後,其實只想驗證新頁面跳轉對不對,這裡可以做個簡單的驗證,擷取當前頁面的title驗證

    2.驗證完後切關閉新視窗

    3.切回控制代碼到首頁

    4.列印當前頁面的控制代碼,看是否切換到首頁了


六、大量操作

    1.把需要校正的結果放在list隊列r裡

    2.for迴圈遍曆執行每個按鈕的點擊操作

    3.判斷結果對應list裡的每個結果


七、最終指令碼

    1.整理後最終指令碼如下,結果

# coding:utf-8

from selenium import webdriver

import time

driver = webdriver.Firefox()

driver.get("http://news.baidu.com/")

driver.implicitly_wait(10)

# 擷取當前視窗控制代碼

h = driver.current_window_handle

# 定位網頁、貼吧等連結

s = driver.find_elements_by_css_selector(".tab>a")

r = [u"百度一下", u"貼吧", u"知道",  u"音樂",

     u"圖片", u"視頻", u"地圖", u"百科", u"文庫"]

for a, b in zip(s, r):

    a.click()

    text = a.text

    time.sleep(2)

    all_h = driver.window_handles

    # 迴圈判斷是否與首頁控制代碼相等

    for i in all_h:

        if i != h:

            driver.switch_to.window(i)

            time.sleep(1)

    print driver.title

    if b in driver.title:

        print(text+u"頁面開啟正常")

    else:

        print(text+u"頁面測試失敗")

    driver.close()                       # 關閉當前頁面

    driver.switch_to.window(h)           # 切回控制代碼到首頁

driver.quit


Selenium2+python自動化13-多視窗、控制代碼(handle)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.