自動化測試基礎篇--Selenium iframe定位問題


有時候我們在定位的途中發現一個現象,元素就在那兒,不離不去,但是我們怎么整就是定不了位,這個時候就要具體網頁的特殊性。這里介紹如果遇到了iframe的時候我們怎么處理。
一、frame和iframe區別
  Frame與Iframe兩者可以實現的功能基本相同,不過Iframe比Frame具有更多的靈活性。 frame是整個頁面的框架,iframe是內嵌的網頁元素,也可以說是內嵌的框架
Iframe標記又叫浮動幀標記,可以用它將一個HTML文檔嵌入在一個HTML中顯示。它和Frame標記的最大區別是在網頁中嵌入 的<Iframe></Iframe>所包含的內容與整個頁面是一個整體,而<Frame>< /Frame>所包含的內容是一個獨立的個體,是可以獨立顯示的。另外,應用Iframe還可以在同一個頁面中多次顯示同一內容,而不必重復這段內 容的代碼。
二、以網易郵箱(163郵箱)登錄為例
使用iframe最多的就是網易的郵箱,恰巧我們經常的會拿網易的郵箱來做登錄的練習,結果發現整死都定不了位,下面我們一步一步的解析163郵箱登錄。
第一步:打開登錄頁面
這個沒什么好說的,每個測試用例的第一步都是打開瀏覽器,打開需求網頁。
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 from selenium import webdriver
4 import time
5 url = 'http://mail.163.com/'
6 browser = webdriver.Firefox()
7 browser.get(url)
8 time.sleep(3)
第二步:定位元素
我們先通過firebug看看這個和我們平常的網頁有什么不同,我們以百度為例;
通過對比發現,百度的搜索框是直接在Top Window上,而163郵箱的輸入框在iframe#x-URS-iframe上,這就是iframe。我們怎么定位呢?
首先,我們要切換到iframe上,這里要用到selenium方法,用switch_to_frame方法切換,此處有id屬性,可以直接用id定位切換;
1 browser.switch_to.frame('x-URS-iframe')
其次,在定位用戶名、密碼和登錄按鈕;
1 browser.find_element_by_name('email').send_keys('cf563540134')
2 browser.find_element_by_name('password').send_keys('xxx')
3 browser.find_element_by_id('dologin').click()

  最后,返回到主界面,釋放iframe;

1 browser.switch_to_default.content()

   第三步:怎樣確定iframe的id?

1.這里iframe的切換是默認支持id和name的方法的,當然實際情況中會遇到沒有id屬性和name屬性為空的情況,這時候就需要先定位iframe;
    2.定位元素還是之前的八種方法同樣適用,這里我可以通過tag先定位到,也能達到同樣效果。
1 iframe = browser.find_element_by_tag_name('iframe')
2 browser.switch_to.frame(iframe)
第四步:怎樣快速確定一個網頁是否有iframe
這里提供一個簡單的方法,當然可能不是很准確,但是最快速最簡單,就是當我們按F12后出現firebug,看左上角顯示的是Top Window還是iframe#xxx。
如果出現的是Top Window,則表示沒有iframe,我們可以正常定位;
如果出現的是iframe/frame。則表示有iframe/frame,我們需要切換到iframe/frame,才能定位。
 
寫在最后的話:這些都是小編自己一個字一個字敲上去的,原創算不上,可能很多類似的資料,小編寫這個的目的是為了激勵自己在學習道路上養成良好的習慣,所以轉載請注明出處,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM