首页 > 代码库 > Selenium2+python自动化13-多窗口、句柄(handle)
Selenium2+python自动化13-多窗口、句柄(handle)
前言
有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。
本篇以打开百度新闻页面搜索按钮上的链接页面为例,依次打开每个按钮,并检验测试结果。用脚本批量操作,可以减少重复劳动,重复的事情让脚本去执行吧!
一、定位一组元素
1.打开百度新闻页面:17http://news.baidu.com/17
2.定位搜索框上一排按钮网页、贴吧,知道等
3.定位一组元素方法在第八篇已经讲过,这里就不多讲,通过firebug可以查看他们有共同属性标签为a,且有个老爸为:<div class="tab">
二、获取当前窗口句柄
1.当点击百度新闻页面上“网页”按钮时,会打开一个新的窗口
2.人为操作的话,可以通过点击窗口切换到不同的窗口上,但是脚本它不知道你要操作哪个窗口,这时候只能获取窗口唯一的标识:句柄
3.获取当前页面的句柄:driver.current_window_handle
三、获取所有句柄
1.先通过css定位到所有按钮:".tab>a"
2.从定位的一组中随便取一个点击打开
3.然后获取当前页面的所有句柄,发现此时有两个了
四、切换句柄
1.循环判断是否与首页句柄相等
2.如果不等,说明是新页面的句柄
3.获取的新页面句柄后,可以切换到新打开的页面上
4.打印新页面的title,看是否切换成功
五、关闭新窗口,切回主页
1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证
2.验证完后切关闭新窗口
3.切回句柄到首页
4.打印当前页面的句柄,看是否切换到首页了
六、批量操作
1.把需要校验的结果放在list队列r里
2.for循环遍历执行每个按钮的点击操作
3.判断结果对应list里的每个结果
七、最终脚本
1.整理后最终脚本如下,结果如图所示
# coding:utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://news.baidu.com/")
driver.implicitly_wait(10)
# 获取当前窗口句柄
h = driver.current_window_handle
# 定位网页、贴吧等链接
s = driver.find_elements_by_css_selector(".tab>a")
r = [u"百度一下", u"贴吧", u"知道", u"音乐",
u"图片", u"视频", u"地图", u"百科", u"文库"]
for a, b in zip(s, r):
a.click()
text = a.text
time.sleep(2)
all_h = driver.window_handles
# 循环判断是否与首页句柄相等
for i in all_h:
if i != h:
driver.switch_to.window(i)
time.sleep(1)
print driver.title
if b in driver.title:
print(text+u"页面打开正常")
else:
print(text+u"页面测试失败")
driver.close() # 关闭当前页面
driver.switch_to.window(h) # 切回句柄到首页
driver.quit
Selenium2+python自动化13-多窗口、句柄(handle)