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

获取窗口的唯一标识用句柄(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. css 浮动和清除浮动

    在写页面布局的过程中,浮动是大家经常用的属性.在好多的排版布局中都是用的的浮动比如说下面这些地方都是应用到了浮动. 在我学习浮动的时候可是熬坏了脑筋,在这里我分享一下我对浮动这块知识的总结. 一.浮动 ...

  2. 【归纳整理】Ajax / JSON / WEB存储 / iframe

      Ajax 一.什么是 AJAX ? AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种用于创建快速动态网页 ...

  3. 多个activity跳转保留内存使用intent传递数据问题_新手

    /////本来是做的activity跳转,普通那种,但是会在调回来会销毁原来的,重新调用onCreate方法, 后来参考[http://blog.csdn.net/qq_26918031/articl ...

  4. 写一个ORM框架的第一步

    新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦. 一 ...

  5. Python实战之用类的静态方法实现登录验证

    #!usr/bin/env Python3 # -*-coding:utf-8-*- __author__="William" #define a class,just to le ...

  6. java中重载变长参数方法

    一.测试代码 package com.demo; public class Interview { public static void test(int i){ System.out.println ...

  7. Spring3实战第二章第一小节 Spring bean的初始化和销毁三种方式及优先级

    Spring bean的初始化和销毁有三种方式 通过实现 InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法: 优先级第二通过 <bean& ...

  8. 国内为什么没有好的 Stack Overflow 的模仿者?,因为素质太低?没有分享精神?

    今天终于在下班前搞定一个技术问题,可以准时下班啦.当然又是通过StackOverflow找到的解决思路,所以下班路上和同事顺便聊起了它,两个资深老程序猿,还是有点感叹,中国的程序员群体人数应该不少,为 ...

  9. EasyUI Tree 树 ——实现多级别菜单的展示,以及与后台数据的交互

    一 要引入的js css库 <link type="text/css" href="css/base.css" rel="stylesheet& ...

  10. android 屏幕适配基础(1)

    1. 概念定义 寸/英寸:   1寸=3.333333厘米:1英寸=2.54厘米(屏幕尺寸以英寸为单位) 像素 :    像素是组成图象的最基本单元要素:点. 一个像素有多大呢?主要取决于显示器的分辨 ...