首先還是圍繞以下幾個方面來看:
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就行。如圖:
有什么需要補充的或者說的不對的地方請一定要指正出來,謝謝啦。