selenium基础(多表单切换、多窗口切换)
一、多表单的切换
frame:HTML页面中的一中框架,主要作用是在当前页面中指定区域显示另一页面元素;
(HTML语言中,frame/iframe标签为表单框架)
- 在web应用中会遇到frame或者iframe表单嵌套页面的应用,对于表单内嵌页面上的元素无法直接进行定位
- 通过driver.switch_to.frame("id|name")方法将当前定位的主体切换为frame或iframe表单的内嵌页面中
- 恢复默认页面方法:driver.switch_to.default_content()
- 以126邮箱登录功能为例,代码如下
-
from selenium import webdriver import time from webdriver.common.action_chains import ActionChains driver=webdriver.Firefox() driver.get("https://mail.126.com/") driver.maximize_window() driver.find_element_by_id("switchAccountLogin").click() time.sleep(1) #定位当内嵌表单中 driver.switch_to.frame("")#因id是动态的,通过name进行定位 driver.find_element_by_name("email").send_keys(13212345678) time.sleep(1) driver.find_element_by_name("password").send_keys(12345678) time.sleep(1) #恢复到默认页面 driver.switch_to.default_content() driver.quit()
#以麦子学院为例: from selenium import webdriver import time driver=webdriver.Firefox() driver.get("http://www.maiziedu.com/") time.sleep(10) driver.switch_to.frame("chatIframe")#进入嵌套表单页面 driver.find_element_by_xpath('//*[@id="chat-close"]').click() driver.switch_to.default_content()#恢复到默认页面 time.sleep(2) driver.find_element_by_link_text('登录').click() driver.find_element_by_id('id_account_l').send_keys("1234qw3486029") driver.find_element_by_id('id_password_l').send_keys(12345) driver.find_element_by_id('login_btn').click() time.sleep(2) driver.quit()
二、多窗口切换
说明:在HTML页面中,经常有a标签也就是超链接,这些链接在执行时,有的会在新的窗口的打开链接
1、多窗口切换
说明:在WebDriver中的封装了获取当前窗口句柄方法和获取所有窗口句柄的方法以及切换指定句柄窗口的方法
(句柄:窗口的唯一开标识码)
2、方法:
(1)driver.current_window_handle 获取当前窗口句柄
(2)driver.window_handles 获取所有窗口句柄
(3)driver.switch_to.window(handle) 切换指定句柄窗口
(4)driver.close() 关闭当前的句柄
(5)driver.quit() 关闭浏览器
from selenium import webdriver import time driver=webdriver.Firefox() #进入百度首页-搜索麦子学院 driver.get('https://www.baidu.com') time.sleep(2) driver.find_element_by_id('kw').send_keys('麦子学院') driver.find_element_by_id('su').click() time.sleep(2) #搜索麦子学院首页 driver.find_element_by_partial_link_text('专业IT职业教育平台').click() time.sleep(2) #跳转到百度引擎页面 driver.switch_to.window(driver.window_handles[0])#获取窗口的句柄,并跳转到第一个句柄 time.sleep(2) #跳转回麦子学院首页 driver.switch_to.window(driver.window_handles[1])#跳转回麦子学院首页 time.sleep(2) #关闭麦子学院首页句柄 driver.close() time.sleep(2) #退出浏览器 driver.quit()