python与selenium自动化基础-多窗口切换、多表单切换

多窗口切换

方法:
(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
d = webdriver.Firefox()
d.get('https://www.baidu.com/')
d.find_element_by_id('kw').clear()
d.find_element_by_id('kw').send_keys("慕课网")
d.find_element_by_id('su').click()
time.sleep(10)
d.find_element_by_partial_link_text('程序员的梦工厂').click()
time.sleep(10)
print(d.window_handles)
d.switch_to.window(d.window_handles[1])
print(d.current_window_handle)
print(d.current_url)
d.close() 
d.quit()

输出:

['6442450945', '6442450949']
6442450949
https://www.imooc.com/

多表单切换

在网页中,表单嵌套是很常见的情况,尤其是在登录的场景
1)什么是多表单?
    实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面
2)处理方法        
    直接使用id值切换进表单
        driver.switch_to.frame(value)
    定位到表单元素,再切换进入
        el = driver.find_element_by_xxx(value)
        driver.switch_to.frame(el)

 

webdriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to_frame()方法将当前定位的主体切换为内嵌表单。

from selenium import webdriver
import time
driver = webdriver.Firefox()
url = 'http://126.com/'
driver.get(url)
time.sleep(5)   # 防止加载太快
# 定位到表单
el_frame = driver.find_element_by_tag_name('iframe')
# 切换进入表单中
driver.switch_to.frame(el_frame)
# 在表单中定位账号输入框
el_user = driver.find_element_by_name('email')
# 输入账号
el_user.send_keys('itcast_soft_test')
# 定位密码输入框标签
el_pwd = driver.find_element_by_name('password')
# 输入密码
el_pwd.send_keys('1qaz2wsx#EDC')

# 定位登陆按钮
el_sub = driver.find_element_by_id('dologin')
# 点击登录
el_sub.click()

time.sleep(5)
driver.close()

driver.switch_to.default_content()
跳回最外层的页面。
driver.switch_to.parent_frame()
跳回上层的页面。

posted @ 2020-01-02 21:46  忆梦,惊梦  阅读(277)  评论(0编辑  收藏  举报