摘自https://www.cnblogs.com/sanzangTst/p/7680402.html

有时我们在打开浏览器浏览网页时,当点击网页上某些链接时,它不是直接在当前页面上跳转,而是重新打开一个新标签页面,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

一、认识多窗口

1、这里以赶集网为例,打开赶集网http://cd.ganji.com/,点击工作,就会发现会重新打开一个窗口;

二、获取当前窗口句柄

1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。

2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。

3.获取当前页面的句柄:browser.current_window_handle

4.执行结果

三、获取所有窗口句柄

1、获取所有窗口句柄:brows.window_handles

2、执行结果

四、切换句柄

方法一:

1.循环判断是否与首页句柄相等;

2.如果不等,说明是新页面的句柄;

3.获取的新页面句柄后,可以切换到新打开的页面上;

4.打印新页面的title,看是否切换成功。

执行结果

方法二:

直接获取all_h这个list数据里面第二个hand的值:all_h[i]

执行结果

五、关闭新窗口,返回到原来的窗口

1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证;

2.验证完后切关闭新窗口;

3.切回句柄到首页;

4.打印当前页面的句柄,看是否切换到首页了。

执行结果

六、参考代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : handles.py
# @Software: PyCharm
import time
from selenium import webdriver
url = 'http://cd.ganji.com/'
browser = webdriver.Firefox()
browser.get(url)
time.sleep(5)
# 获取当前页面的窗口句柄
handle = browser.current_window_handle
print(handle)
# 获取所有窗口句柄
browser.find_element_by_link_text('成都招聘').click()
handles = browser.window_handles
print(handles)
# 方法一:判断句柄是否与首页相等
for i in handles:
if i != handle:
browser.switch_to.window(i)
print(browser.title)
browser.close()
browser.switch_to.window(handle)
print(browser.title)
# 方法二:直接获取list列表里面的值,取值handles[i]
# browser.switch_to.window(handles[0])
# print(browser.title)
# 退出
browser.quit()

  

自动化测试基础篇--Selenium多窗口、句柄问题的更多相关文章

  1. 自动化测试基础篇--Selenium简单的163邮箱登录实例

    摘自https://www.cnblogs.com/sanzangTst/p/7472556.html 前面几篇内容一直讲解Selenium Python的基本使用方法.学习了什么是selenium: ...

  2. 自动化测试基础篇--Selenium文件上传send_keys

    摘自https://www.cnblogs.com/sanzangTst/p/8358165.html 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一 ...

  3. 自动化测试基础篇--Selenium中JS处理滚动条

    摘自https://www.cnblogs.com/sanzangTst/p/7692285.html 前言 什么是JS? JS就是JavaScript: JavaScript 是世界上最流行的脚本语 ...

  4. 自动化测试基础篇--Selenium鼠标键盘事件

    摘自https://www.cnblogs.com/sanzangTst/p/7477382.html 前面几篇文章我们学习了怎么定位元素,同时通过实例也展示了怎么切换到iframe,怎么输入用户名和 ...

  5. 自动化测试基础篇--Selenium浏览器操作

    摘自https://www.cnblogs.com/sanzangTst/p/7462056.html  学习 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法 ...

  6. 自动化测试基础篇--Selenium元素定位

    摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...

  7. 自动化测试基础篇--Selenium简介

    摘自https://www.cnblogs.com/sanzangTst/p/7452636.html 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software Testing) ...

  8. 自动化测试基础篇--Selenium Python环境搭建

    学习selenium python需要的工具: 1.浏览器 2.Python 3.Selenium 4.FireBug(Firefox) 5.chromedriver.IEDriverServer.g ...

  9. 引用 自动化测试基础篇--Selenium简介

    原文链接:http://www.cnblogs.com/sanzangTst/p/7452636.html 鸣谢参藏法师 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software ...

随机推荐

  1. SpringCloud实战10-Sleuth

    Spring-Cloud-Sleuth是Spring Cloud的组成部分之一,为SpringCloud应用实现了一种分布式追踪解决方案,其兼容了Zipkin, HTrace和log-based追踪, ...

  2. leetcode — powx-n

    /** * Source : https://oj.leetcode.com/problems/powx-n/ * * Created by lverpeng on 2017/7/18. * * Im ...

  3. Linux软件包管理之yum在线管理

    目录 1.yum在线管理 2.网络 yum 源 3.光盘 yum 源搭建步骤 ①.挂载光盘 ②.让网络 yum 源失效 ③.修改光盘yum源文件 ④.输入yum list 可以查看光盘yum源里面的软 ...

  4. 基于SpringMVC+Spring+MyBatis实现秒杀系统【数据库接口】

    前言 该篇教程主要关注MyBatis实现底层的接口,把MyBatis交给Spring来托管.数据库连接池用的c3p0.数据库用的MySQL.主要有2个大类:秒杀商品的查询.秒杀明细的插入. 准备工作 ...

  5. Jenkins凭证及任务演示-pipeline(二)--技术流ken

    Jenkins前言 在上一篇博客<Jenkins持续集成介绍及插件安装版本更新演示(一)--技术流ken>中已经详细介绍了jenkins的插件安装以版本更新等,本篇博客将再深入探究jenk ...

  6. 【转】没那么难,谈CSS的设计模式

    什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上:也曾有人这么说,不是设计模式没用,是你还没有到能懂它,会用它的时候. 先来看一下比较官方的解释:“设计模式(Design p ...

  7. 【转载】访问IIS中网站出现 403.14 - Forbidden报错信息

    将网站发布后部署到IIS后,配置完应用程序池以及相关设置项后,在浏览器中访问设置好的网站,出现403.14 - Forbidden的错误信息,从错误信息的提示来看,应该是IIS服务器此网站目录的内容被 ...

  8. Opencv-python画图基础知识

    相关函数介绍 1. Point 该数据结构表示了由其图像坐标 和 指定的2D点.可定义为: Point pt; pt.x = 10; pt.y = 8; 或者 Point pt = Point(10, ...

  9. Windows server 2008 R2配置多个远程连接

    1.右键计算机属性——远程设置——出现系统属性对话框——选择“远程”选项卡,按如下图操作:. 2.默认只有administrator具有远程桌面的权限,其他用户都没有权限远程桌面连接服务器.因此,我们 ...

  10. 一个smtp发送错误

    错误返回: Error: need EHLO and AUTH first ! 原因:服务器是smtp.exmail.qq.com,邮箱账号是企业新申请的邮箱账号,邮箱密码需要重新修改. 解决办法:修 ...