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')
浙公网安备 33010602011771号