1. 程式人生 > >4.9 多表單切換

4.9 多表單切換

b- 百度 class 可用 一個 fir switch AS oot

在 web 應用中經常會遇到 frame 嵌套頁面的應用,頁 WebDriver 每次只能在一個頁面上識別元素,對
於 frame 嵌套內的頁面上的元素,直接定位是定位是定位不到的。這個時候就需要通過 switch_to_frame()
方法將當前定位的主體切換了 frame 裏。

技術分享圖片
 1 <html>
 2 <head>
 3 <link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.mi        n.css"
 4 rel="stylesheet" />
 5 <script type="text/javascript"
>$(document).ready(function(){ 6 }); 7 </script> 8 </head> 9 <body> 10 <div class="row-fluid"> 11 <div class="span10 well"> 12 <h3>frame</h3> 13 <iframe id="if" name="nf" src="http://www.baidu.com" width="800" 14 height="300"> 15 </iframe> 16 </div>
17 </div> 18 </body> 19 <script 20 src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js"></script> 21 </html>
frame

技術分享圖片

這個時候直接定位百度的輸入框一定會報找不到元素的錯誤。那麽可以使用 switch_to_frame()先找到

frame.html 中的<iframe>標簽,然後再定位百度輸入框。

技術分享圖片
 1 #coding=utf-8
 2 from selenium import webdriver
3 import time 4 import os 5 driver = webdriver.Firefox() 6 file_path = file:/// + os.path.abspath(frame.html) 7 driver.get(file_path) 8 #切換到 iframe(id = "if") 9 driver.switch_to_frame("if") 10 #下面就可以正常的操作元素了 11 driver.find_element_by_id("kw").send_keys("selenium") 12 driver.find_element_by_id("su").click() 13 time.sleep(3) 14 driver.quit()
fame

switch_to_frame() 默認可以直接取表單的 id 或 name 屬性進行切換。如

……
#id = "if"
driver.switch_to_frame("if")
#name = "nf"
driver.switch_to_frame("nf")
……
那麽如果 iframe 沒有可用的 id 和 name 可以通過下面的方式進行定位:

#先通過 xpth 定位到 iframe
xf = driver.find_element_by_xpath(‘//*[@class="if"]‘)
#再將定位對象傳給 switch_to_frame()方法
driver.switch_to_frame(xf)
……
driver.switch_to_default_content()

如果完成了在當前表單上的操作可以通過 switch_to_default_content()方法返回到上一層表單。該方法

不用指定某個表單的返回,默認對應與它最近的 switch_to_frame()方法。

4.9 多表單切換