selenium 多窗口、句柄处理

前言
有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

本篇以打开百度新闻页面搜索按钮上的链接页面为例,依次打开每个按钮,并检验测试结果。用脚本批量操作,可以减少重复劳动,重复的事情让脚本去执行吧!

一.定位一组元素

1.打开百度首页面:http://www.baidu.com/
2.定位搜索框右上一排按钮网页、贴吧,知道等
3.定位一组元素方法在第八篇已经讲过,这里就不多讲,通过 firebug
可以查看他们有共同属性标签为 a,且有个老爸为:<div id="u1">

这里写图片描述

二、获取当前窗口句柄

1.当点击百度学术页面上“网页”按钮时,会打开一个新的窗口
2.人为操作的话,可以通过点击窗口切换到不同的窗口上,但是脚本它不
知道你要操作哪个窗口,这时候只能获取窗口唯一的标识:句柄
3.获取当前页面的句柄:driver.current_window_handle

这里写图片描述

三、获取所有句柄

注:

由于百度网页升级,在百度首页点击新闻等按钮时,会在当前窗口打开网页,但是我发现在百度学术页面点击网页,会跳转到新窗口,所以我们这里以百度学术为首页,来进行演示。

先看一下百度学术的网页,这里可以定位到右上角的一排按钮时在<div id="u" class="index_u">中;

这里写图片描述

1.先通过css 定位到所有按钮:”.index_u>a”
2.从定位的一组中随便取一个点击打开
3.然后获取当前页面的所有句柄,发现此时有两个了

这里写图片描述

四、 切换句柄

1.循环判断是否与首页句柄相等
2.如果不等,说明是新页面的句柄
3.获取的新页面句柄后,可以切换到新打开的页面上
4.打印新页面的 title,看是否切换成功

这里写图片描述

五、关闭新窗口,切回主页

1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的
验证,获取当前页面的 title 验证
2.验证完后切关闭新窗口
3.切回句柄到首页
4.打印当前页面的句柄,看是否切换到首页了

这里写图片描述

六、批量操作

1.把需要校验的结果放在 list 队列 r 里
2.for 循环遍历执行每个按钮的点击操作
3.判断结果对应 list 里的每个结果

这里写图片描述

七、最终脚本

#coding:utf-8
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('http://xueshu.baidu.com/')
driver.implicitly_wait(10)
#获取当前窗口句柄
h = driver.current_window_handle
print h
#定位网页、贴吧等按钮
s = driver.find_elements_by_css_selector('.index_u>a')
r = [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,"+","页面打开正常"
        else:
            print text,"+","页面测试失败"
        #driver.close()  #关闭当前页面
        driver.switch_to_window(h) #切回句柄首页
        print driver.current_window_handle #打印当前句柄
driver.quit()
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值