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

获取窗口的唯一标识用句柄(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. (转)深度学习word2vec笔记之基础篇

    深度学习word2vec笔记之基础篇 声明: 1)该博文是多位博主以及多位文档资料的主人所无私奉献的论文资料整理的.具体引用的资料请看参考文献.具体的版本声明也参考原文献 2)本文仅供学术交流,非商用 ...

  2. JavaWeb(二)会话管理之细说cookie与session

    前言 前面花了几篇博客介绍了Servlet,讲的非常的详细.这一篇给大家介绍一下cookie和session. 一.会话概述 1.1.什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接, ...

  3. JavaScript高级(01)

    前端开发工具 1.1. WebStorm介绍和下载 l  介绍 WebStorm是JetBrains 推出的一款强大的HTML5编辑工具,拥有丰富的代码快速编辑,可以智能的补全代码.代码格式化.htm ...

  4. java中需要注意的小细节

    很早以前就打算写博客,但是总是因为不知道写什么,或是觉得博客里其他人已经把我要写的整理很好了而迟迟没有动笔,现在决定把自己平时的记录的一些笔记拿出来,希望大神们可以批评指导,并且希望能够帮助一些刚刚入 ...

  5. spring 内部工作机制(二)

    本章节讲Spring容器从加载配置文件到创建出一个完整Bean的作业流程及参与的角色. Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表, ...

  6. 关于AVALON总线动态地址对齐

    在NIOS的使用中,我们往往要用到自定义外设,然后通过AVALON交换架构和NIOSII进行通信. AVALON总线,其实是一种交换架构的协议,在自定义外设挂在AVALON总线上时,一定要注意地址对齐 ...

  7. zabbix灵活使用userparameters

    userparameters介绍 官网文献:https://www.zabbix.com/documentation/2.0/manual/config/items/userparameters 当我 ...

  8. win10 uwp 自定义控件初始化

    我遇到一个问题,我在 xaml 用了我的自定义控件,但是我给他设置了一个值,但是什么时候我才可以获得这个值? 本文告诉大家,从构造函数.loaded.Initialized 的调用过程. 用最简单的方 ...

  9. WPF DataGridHyperlinkColumn

    为了点击链接,我们使用 <DataGrid x:Name="data" LoadingRow="load" ItemsSource="{Bind ...

  10. Nginx防盗链的3种方法

    一:一般的防盗链如下: location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.jzxue.com jzxue.c ...