6、多表单切换、多窗口切换

Posted on 2019-08-25 12:42  小白猫001  阅读(433)  评论(0)    收藏  举报

  1、多表单切换

  在web页面中如果有frame/iframe表单嵌套页面,webDriver无法直接定位,可以使用switch_to_frame()方法将当前定位的主题切换为frame/iframe表单嵌套页面中。

switch_to_frame()方法默认可以直接取到表单的ID或name属性,如果iframe标签没有ID和name属性,则可以通过以下方式定位: 

 1 from selenium import webdriver
 2 
 3 driver = webdriver.Chrome()
 4 driver.get("https://www.baidu.com/")
 5 
 6 #切换到iframe(id = 'if')
 7 driver.switch_to_frame("if")
 8 #下面就可以正常操作
 9 driver.find_element_by_id("kw").click()
10 
11 #先通过xpath定位到iframe
12 xf = driver.find_element_by_xpath("//*[class='if']")
13 #再将定位对象传给switch_to_frame()方法
14 driver.switch_to_frame('xf')
15 ......
16 #跳出当前一级表单,该方法默认对应离他最近的switch_to_frame()方法
17 driver.switch_to.parent_frame()
18 #如果是多级表单的,可以使用switch_to.default_content()跳回最外层的页面
19 driver.switch_to.default_content()

  2、多窗口切换

  在页面操作过程中点击某个链接会打开新的窗口,这时需要主机切换到新打开的窗口上进行操作,webdriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换

 1 from selenium import webdriver
 2 
 3 driver = webdriver.Chrome()
 4 driver.get("https://www.baidu.com/")
 5 
 6 #获得百度搜索窗口句柄
 7 sreach_windows = driver.current_window_handle
 8 #获得当前所有打开的窗口的句柄
 9 all_handles = driver.window_handles
10 
11 '''
12 判断handle不等于sreach_windows时,就说明当前窗口不是百度搜索页面,那就是新打开的页面,
13 所以通过switch_to.window(handle)切换到新打开的窗口操作
14 '''
15 for handle in all_handles:
16     if handle != sreach_windows:
17         driver.switch_to.window(handle)
18         driver.find_element_by_name('account').send_keys('username')
19         driver.find_element_by_name('password').send_keys('password')