Frame是HTML框架結構常用的一種布局格式,共有三種形式:frameset、frame及iframe。
1、Frameset:將HTML頁面分割,可以嵌入多個HTML源碼文件,實現單個頁面顯示不同HTML頁面效果,不能嵌入在BODY標籤中。
2、Frame:在Frameset下面設置Frame,實現某個框架頁面,必須嵌套在Frameset中,無法單獨存在。
3、Iframe:在某個頁面嵌入一個HMTL窗口信息,可脫離Frameset應用,框架屬性有自己定義。
Frameset在分割頁面後,可以由Frame和iframe嵌入頁面信息,Frame僅能在Frameset中應用,Iframe則無此限制。
Frameset與HTML其他標籤相同,不影響正常的元素定位,但frame及iframe則不同,在定位元素過程中,需先定位frame及iframe。
01 單層frame
單層frame在定位時,需先切換到對應的frame中,利用switch_to.frame(reference)語法進行切換。Reference為需切換的frame的id、name或index等。
如以下frame框架代碼:
則切換frame代碼如下:
如果frame沒有id或name,則可以索引值,也可以利用先查找webelement對象再切換frame的方法進行,查找web element可利用find element方式。
02 嵌套frame
當某個frame中嵌套了其他的frame時,切換frame則需以嵌套結構逐層切換,例如:
上述的html中frame1中嵌套了frame2,如果需要定位frame2中的元素,則切換frame應當逐層切換,如:
當切換到frame2進行操作後,如果需返回到frame1,則可利用以下方法:
返回上一層frame中,類似於回退效果,當上一層是主文檔時,該方法無效。
03 回退主frame
切到某個具體的frame中之後,Selenium不能定位主文檔中的元素,如果想定位主文檔的元素,則需切回主文檔。可利用以下方法: