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就行。如圖:
有什么需要補充的或者說的不對的地方請一定要指正出來,謝謝啦。
?
轉載于:https://www.cnblogs.com/insane-Mr-Li/p/9086997.html
總結
以上是生活随笔為你收集整理的selenium处理iframe定位于切换问题解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL主从复制原理、半同步操作步骤及
- 下一篇: vue中的nextTick