写在前面

感觉到很惭愧呀,因为居然在Selenium+Java系列中没有写过多窗口处理及句柄切换的文章,不过也无妨,不管什么语言,其思路是一样的,下面我们来演示,使用python语言来实现窗口句柄的切换。

什么是窗口句柄

可能有的同学会问了,到底啥是窗口,什么又是多窗口,句柄到底是啥玩楞?

那么,他到底长啥样?如下图所示:

怎么处理多窗口句柄

如何获取窗口句柄

语法:

driver.current_window_handle

1、模拟场景

打开搜狗首页,输入淘宝进入久曲健 博客园,并输出页面标题

2、使用具柄判断切换

就是通过窗口句柄判断切换,示例代码入下:

for window_handle in window_handles:
if window_handle != old_Window:
driver.switch_to.window(window_handle)
print(driver.title)
else:
driver.close()

3、使用URL判断切换

就是根据跳转的当前URL切换,示例代码如下:

for window_handle in window_handles:
driver.switch_to.window(window_handle)
newUrl = driver.current_url
if 'cnblogs' in newUrl:
print(driver.title)
else:
driver.close()

4、通过下标切换

window_handles = driver.window_handles返回的是一个集合,所以自然用下标去切换,简单点说就是,只要找到想要切换的窗口下标即可实现切换,多个窗口不建议使用此方法。

示例代码如下:

driver.close()
driver.switch_to.window(window_handles[1])
print(driver.title)

5、关闭新窗口句柄,切回原来主页

笔者反复试验发现,用句柄删除不好用,还是这个url靠谱,示例代码如下:

for window_handle in window_handles:
driver.switch_to.window(window_handle)
newUrl = driver.current_url
if 'cnblogs' in newUrl:
driver.close()
else:
print(driver.title)

所有汇总代码如下:

# -*- coding: utf-8 -*-
"""
@Time : 2022/10/26 14:12
@Auth : 软件测试君
@File :switch_window.py
@IDE :PyCharm
@Motto:ABC(Always Be Coding)
多窗口处理之句柄切换 """
import time from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service '''
初始化操作
'''
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) def init():
# 最大化操作
driver.maximize_window()
driver.set_script_timeout(60)
# 智能等待找到元素后立即继续执行,全局生效
driver.implicitly_wait(60)
driver.set_page_load_timeout(60) init() driver.get("https://www.sogou.com/")
driver.find_element(By.ID, "query").clear()
driver.find_element(By.ID, "query").send_keys("久曲健 博客园")
driver.find_element(By.ID, "stb").click()
time.sleep(2)
# 获取当前页面窗口句柄(每个句柄的表示都是唯一的)
old_Window = driver.current_window_handle
print('当前窗口句柄为:{0}'.format(old_Window))
driver.find_element(By.LINK_TEXT, "久曲健 - 博客园").click()
time.sleep(2)
window_handles = driver.window_handles
print(window_handles)
'''
### 方法一:
for window_handle in window_handles:
if window_handle != old_Window:
driver.switch_to.window(window_handle)
print(driver.title)
else:
driver.close() '''
'''
### 方法二:
driver.close()
driver.switch_to.window(window_handles[1])
print(driver.title) '''
'''
### 方法三:
for window_handle in window_handles:
driver.switch_to.window(window_handle)
newUrl = driver.current_url
if 'cnblogs' in newUrl:
print(driver.title)
else:
driver.close()
''' # 关闭新窗口句柄,切回原来主页
for window_handle in window_handles:
driver.switch_to.window(window_handle)
newUrl = driver.current_url
if 'cnblogs' in newUrl:
driver.close()
else:
print(driver.title) driver.quit()

写在最后

最近心情还是很不好,恐慌的不是单身可怕,而是年纪越来越大,也不知道现在的女孩都在想什么,好想结婚呀!

感兴趣的同学,请自己去尝试,关于Selenium4.0+Python3系列教程,未完待续····

Selenium4+Python3系列(五) - 多窗口处理之句柄切换的更多相关文章

  1. Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待

    为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...

  2. VSTO之旅系列(五):创建Outlook解决方案

    原文:VSTO之旅系列(五):创建Outlook解决方案 本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案 ...

  3. [时序图笔记] 步步为营UML建模系列五、时序图(Squence diagram)【转】

    概述 顺序图是一种详细表示对象之间以及对象与参与者实例之间交互的图,它由一组协作的对象(或参与者实例)以及它们之间可发送的消息组成,它强调消息之间的顺序. 顺序图是一种详细表示对象之间以及对象与系统外 ...

  4. CSS 魔法系列:纯 CSS 绘制各种图形《系列五》

    我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...

  5. Netty4.x中文教程系列(五)编解码器Codec

    Netty4.x中文教程系列(五)编解码器Codec 上一篇文章详细解释了ChannelHandler的相关构架设计,版本和设计逻辑变更等等. 这篇文章主要在于讲述Handler里面的Codec,也就 ...

  6. WCF编程系列(五)元数据

    WCF编程系列(五)元数据   示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServic ...

  7. 【Xamarin挖墙脚系列:多窗口之间的导航】

    原文:[Xamarin挖墙脚系列:多窗口之间的导航] 在Android中:Intent对象,通知松散耦合的Activity等组件 在IOS中:Segue对象连接视图 <button opaque ...

  8. JVM系列五:JVM监测&工具

    JVM系列五:JVM监测&工具[整理中]  http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...

  9. SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

    原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...

随机推荐

  1. 【游记】CSP 2021 J2

    这次是第一次参加CSP的复赛,所以考的就很LJ. \(DAY-\infty\) 到 \(DAY-14\) 知道了自己苟过了初赛,像个SB一样. (我初赛66分,旁边那位63.5,cao着线过去的) \ ...

  2. 定语从句关系代词只能用 that 的情况

    当先行词被形容词最高级.序数词,以及 the only.the very.the right 等修饰时,关系代词只能用 that. This is the most interesting movie ...

  3. Excelize 发布 2.6.1 版本,支持工作簿加密

    Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...

  4. linux scsi相关的一些学习笔记

      最近看scsi相关处理的一些备忘,比较零碎,仅作参考. 先从最显而易见的打印入手: [0:0:0:0] disk ATA INTEL SSDSC2BX20 0150 - [0:0:1:0] dis ...

  5. 编写X86的ShellCode

    ShellCode 定义 ShellCode是不依赖环境,放到任何地方都能够执行的机器码 编写ShellCode的方式有两种,分别是用编程语言编写或者用ShellCode生成器自动生成 ShellCo ...

  6. 总在用户态调试 C# 程序,终还是搭了一个内核态环境

    一:背景 一直在用 WinDbg 调试用户态程序,并没有用它调试过 内核态,毕竟不是做驱动开发,也没有在分析 dump 中需要接触用内核态的需求,但未知的事情总觉得很酷,加上最近在看 <深入解析 ...

  7. Windows平台真实时毫秒级4K H264/H265直播技术方案

    背景 在刚提出4K视频的时候,大多数人都觉得没有必要,4K的出现,意味着更高的硬件规格和传输要求,1080P看的很爽.很清晰,完全满足了日常的需求.随着电视的尺寸越来越大,原本1080P成像已经无法满 ...

  8. KingbbaseES V8R6集群维护案例之---集群之间数据迁移

    案例说明: 生产环境是集群环境,测试环境是集群,现需要将生产环境的数据迁移到测试集群中运行,本文档详细介绍了从集群环境迁移数据的操作步骤,可以作为生产环境迁移数据的参考. 适用版本: Kingbase ...

  9. Toast 部分记录丢失问题处理

    在日常数据库运维过程中,我们可能会遇到类似以下的错误.该错误信息是由于部分tuple的 toast 字段丢失,导致数据无法访问.需要通过游标方式,将可以访问的数据备份出来. test=# create ...

  10. Linux 配置ODBC连接Oracle

    在使用kdb_database_link 扩展插件连接Oracle数据库时,必须先配置ODBC,确保通过ODBC能连接Oracle数据库.以下是配置ODBC的过程. 一.安装ODBC 1.安装 [ro ...