selenium處理iframe定位於切換問題解決辦法


首先還是圍繞以下幾個方面來看:

1.什么是iframe?

2.為什么我們要定位iframe?

3.我們怎樣定位iframe,與切換iframe?

1.什么是iframe?

♦ b/s架構都使用iframe,官方的定義是這樣的:【iframe 元素會創建包含另外一個文檔的內聯框架(即行內框架)】。什么意思呢,就像是我們的某個主頁,里面有好多小模塊,每      個 小模塊用這個叫做iframe的東西分開來,方便維護,也方便開發各自開發各自的部分,互不相干。

♦ 通常不在同一個iframe分為兩種情況:一種是包含,一種是平級。

2.為什么我們要定位iframe?

♦ 介於iframe是獨立開的一個一個的小模塊,就像是船艙的特性,所以iframe就行船艙的艙門,想要進入船艙去找東西,就必須先進入艙門,所以當元素在不同的iframe時,就必須先進入到元素所在地的iframe之后才能定位到元素。

3.我們怎樣定位iframe,與切換iframe?

♦ iframe幾種情況:1.包含關系也就是嵌套 。2.平級關系

  3.1.定位iframe幾種方式:1.用iframe中的ID來定位 2.用iframe中的name來定位 3.用xpath來定位 4.用css來定位

♦ 首先我們用self.driver.switch_to.frame()這個方法來進入iframe框架,如果iframe是包含關系,需要從最外面的iframe一層一層進入。

self.driver.switch_to.frame()

 

 

♦1.用iframe中的ID來定位

self.driver.switch_to.frame('noticeCheckWin')

♦2.用iframe中的name來定位

self.driver.switch_to.frame('noticeCheckWin')

♦3.用xpath來定位 

 self.frame2 = self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/iframe[3]')
         self.driver.switch_to.frame(self.frame2)#定位動態的iframe,可以把動態的部分刪了然后再用xpath定位

 ♦4.用css來定位

self.frame3 = self.driver.find_element_by_css_selector('body > div.h-main > div.h-screen.layout > div.h-screen-con > iframe')#也可以查出所有的路徑用下標切出來
self.driver.switch_to.frame(self.frame3)

3.2.退出iframe

♦ 退出iframe有兩種形式:1.退出所有的iframe切換到主文檔 2.退回到父級iframe

♦1.退出所有的iframe切換到主文檔 

self.driver.switch_to.default_content()

♦2.退回到父級iframe

switch to.parent_frame()#退回到自己想要的層級

4.場景:1.包含關系也就是嵌套 。2.平級關系

♦ 包含關系也就是嵌套 ,一個iframe的層次在另一個iframe之下。

♦ 4.1.switch to.parent_frame()#退回到自己想要的層級

self.driver.switch_to.frame('noticeCheckWin')#進入一個iframe。
time.sleep(10) self.driver.find_element_by_id('startProcess').click()#進入發起流程
time.sleep(10) self.frame2=self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/iframe[3]') self.driver.switch_to.frame(self.frame2)#進入第二個iframe
time.sleep(10) self.driver.find_element_by_id('startProcess').click()#定位元素
self.driver.switch to.parent_frame()#退出第二個iframe
self.driver.find_element_by_id('account_pass').send_keys('1')#在第一個框架內定位元素
self.driver.switch to.parent_frame()#退出第一個iframe

♦1.退出所有的iframe切換到主文檔 

self.driver.switch_to.frame('noticeCheckWin')#進入一個iframe。
time.sleep(10) self.driver.find_element_by_id('startProcess').click()#進入發起流程
time.sleep(10) self.frame2=self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/iframe[3]') self.driver.switch_to.frame(self.frame2)#進入第二個iframe
time.sleep(10) self.driver.find_element_by_id('startProcess').click()#定位元素
self.driver.switch_to.default_content()#直接退出第一個iframe

注意:在遇到動態的ID或者name時我們直接把動態ID或者name刪掉重新copy,xpath或者,css就行。如圖:

有什么需要補充的或者說的不對的地方請一定要指正出來,謝謝啦。

 


免責聲明!

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



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