在做网页自动化测试的时候,难免会打开很多个网页,那么,如何在多个窗口之间切换呢?

获取窗口的唯一标识用句柄(handle)表示,因此只需要切换句柄,就可以灵活的在各窗口之间切换。

下面介绍几个方法

  • current_windle_handle          获得当前窗口的句柄
  • window_handles                         获得所有窗口的句柄
  • switch_to_window(handle)         切换到制定窗口

还是用例子说话:

在火狐首页中打开新浪,这样就有了两个窗口

#导入需要使用的包
from selenium import webdriver
import time #设置要打开的网页链接
url="http://e.firefoxchina.cn/"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(3) #打开一个新窗口
driver.find_element_by_css_selector("a[title='新 浪']").click()

下面我们来看current_window_handle的用法

#获得当前窗口的handle
now_handle=driver.current_window_handle
#打印
print(now_handle)

打印的结果是13

新浪,是我们打开的新页面,所以,13一定是新浪的handle喽?

是与不是,我们把标题打印出来就知道啦。在上面的代码最后,打印标题。

#打印标题
print(driver.title)

what???!!!这不是火狐首页的标题吗?!

没错,我们点击一个连接,打开一个页面后,虽然,新的页面将原本的页面覆盖,但handle的焦点依然在原来页面上,需要我们进行切换。

但是,switch_to_winow(handle)是需要传递参数的,传递我们要切换的窗口的handle。如何知道窗口的handle?

#获得所有窗口
allhandles=driver.window_handles
print("所有窗口:"+allhandles)

试一试效果

OK,13是火狐主页的,那56肯定是新开的页面的,多运行几次就会发现,56这各数字是在变的,所以我们不可能先通过window_handles获得编号,再去给程序增加代码的方式定位到新开的页面。

介绍两种方法切换窗口:

  • 方法1:数组

传递的参数可以使用driver.windows_handles[数字]来表示。

可以将窗口的句柄想象为一个数组,数组的0值即为第一个窗口,1值为第二个窗口,以此类推,-1值表示最后一个窗口。

以打开最后一个窗口为例:

driver.switch_to_window(driver.window_handles[-1])
print(driver.title) 

效果如下:

  • 方法2:循环判定,任意切换

如果切换到随意一个窗口,可使用title来循环判定,这种方法较为复杂,不推荐使用。

for handle in allhandles:
title="新浪首页"
driver.switch_to_window(handle)
print("当前为:"+driver.title) if title in driver.title:
#验证
now=driver.current_window_handle
print("切换后:"+now)
print(driver.title)
break

效果如下:

全部代码如下:

 #导入需要使用的包
from selenium import webdriver
import time #设置要打开的网页链接
url="http://e.firefoxchina.cn/"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(3) #打开一个新窗口
driver.find_element_by_css_selector("a[title='新 浪']").click() #current_window_handle,获得当前窗口
now_handle=driver.current_window_handle
print("当前窗口",now_handle)
print("当前窗口",driver.title) #window_handles,获得所有窗口
allhandles=driver.window_handles
print("所有窗口",allhandles) #切换到最新打开的窗口
driver.switch_to_window(driver.window_handles[-1])
print(driver.title) #通过循环,判定title,切换
for handle in allhandles:
title="新浪首页"
driver.switch_to_window(handle)
print("当前为:"+driver.title) if title in driver.title:
#验证
now=driver.current_window_handle
print("切换后:"+now)
print(driver.title)
break

selenium切换窗口的更多相关文章

  1. 多测师讲解selenium ——切换窗口——打印句柄_高级讲师肖sir

    (一)同一个窗口打开两个浏览器 from selenium import webdriverfrom time import sleepdrvier=webdriver.Chrome()url='ht ...

  2. selenium 切换窗口 每次成功code

    最近用了网络上别人的一段切换窗口的code每次成功了,不错,学习 // 根据Title切换新窗口 public boolean switchToWindow_Title(WebDriver drive ...

  3. python3 selenium 切换窗口的几种方法

    第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄windows = driver.window_handles# 切换到当前最新打开的窗口driv ...

  4. Selenium切换窗口,警告框处理,调用JavaScript代码

    多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作. WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切 ...

  5. selenium 切换窗口的几种方法

    第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄 windows = driver.window_handles # 切换到当前最新打开的窗口 d ...

  6. python+selenium切换窗口(获取句柄信息)

    current_window_handle:获得当前窗口句柄: window_handles:返回所有窗口的句柄到当前会话: switch_to.window(suoyou[0]) ========= ...

  7. selenium切换窗口后定位元素出现问题的解决方案

    在做UI自动化的过程中,有时需要由一个窗口跳转到另一个窗口,这时直接去定位页面元素,可能会出现问题,这时,我们需要将driver与新的窗口进行绑定. 完整代码如下:(python版) #coding= ...

  8. Python3 Selenium多窗口切换

    Python3 Selenium多窗口切换 以腾讯网(http://www.qq.com/)为例,打开腾讯网,点击新闻,打开腾讯新闻,点击新闻中第一个新闻链接. 在WebDriver中封装了获取当前窗 ...

  9. Python+Selenium学习--窗口切换及操作元素

    场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...

随机推荐

  1. Elasticsearch(GEO)空间检索查询

    Elasticsearch(GEO)空间检索查询python版本 1.Elasticsearch ES的强大就不用多说了,当你安装上插件,搭建好集群,你就拥有了一个搜索系统. 当然,ES的集群优化和查 ...

  2. tcpdump 使用实践

    tcpdump常用配置指导 参考:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 1. 指定端口抓包  -i 说明: ...

  3. 从开发到部署会用到的 Docker 命令

    本文的目的是理解容器开发在目标环境中部署的端到端流程,并列出这些操作所需的 Docker 命令.如果有任何Docker问题,请移步到最新最热的技术社区 IT帮 itbang.me 提问,短信通知专家来 ...

  4. 1、Http概述

    1.1 Web客户端和服务器 HTTP 客户端和 HTTP 服务器共同构成了万维网的基本组件,客户端向服务器发送 HTTP 请求, 服务器会在 HTTP 响应中回送所请求的数据. 示意图: 1.2 媒 ...

  5. 自学 Python 3 最好的 入门 书籍 推荐(附 免费 在线阅读 下载链接)

    请大家根据自己的实际情况对号入座,挑选适合自己的 Python 入门书籍: 完全没有任何编程基础:01 号书 少量编程基础,不求全,只希望能以最快的速度入门:02 号书 少量编程基础,有一定的英文阅读 ...

  6. JDBC工具类实例

    本文以讲解用单利模式实现一个简单的JDBC实用工具类JDBC连接的四个基本步骤:1.加载相应数据库驱动2.建立相应数据库连接3.构建Statement语句,即增删改查SQL语句4.执行Statemen ...

  7. 限定textbox中只能输入数字的小方法

    在textbox中加入onkeyup="this.value=this.value.replace(/\D/g,' ')"即可实现这一功能 验证数字的正则表达式:^[0-9]*$或 ...

  8. LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)

    Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  9. JAVA 的 Date、Calendar的常用用法

    一.Date与String的互转用法,这里需要用到SimpleDateFormat Date date = new Date();        //设置格式        SimpleDateFor ...

  10. JS框架设计读书笔记之-异步

    setTimeout/setInterval 1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些. 2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为1 ...