写在前面

感觉到很惭愧呀,因为居然在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. java-循环

    1.循环:反复执行一段相同或相似的代码(逻辑相似或者相同)2.循环三要素: 1.循环变量的初始化 2.循环的条件(以循环变量为基础) 3.循环变量的改变(向着循环的结束变)循环变量:在整个循环过程中所 ...

  2. SecureCRT 和 Xshell 连接ENSP 教程

    前言:很多人问我说想尝试使用 CRT和Xshell连接 ENSP的某台设备,以模拟现网中的工作状态,所以出了这篇随笔. ENSP版本: Xshell 连接教程 Xshell 7 评估版(其他版本没测试 ...

  3. 免费内网穿透服务Localtunnel

    Localtunnel 将为您分配一个唯一的可公开访问的 url,它将所有请求代理到您本地运行的网络服务器. 快速开始 全局安装 Localtunnel(需要 NodeJS)以使其在任何地方都可以访问 ...

  4. DispatcherServlet 分发流程

    0 太长不看版 HTTPServlet 的 Service 方法将请求按类进行分解 主要是根据HTTP方法的类型调用 doXXX 方法 GET 和 HEAD 方法需要对 if-modified-sin ...

  5. Linux安装Minio

    Linux安装Minio 一.安装包方式安装 1.下载minio 1.1 手动下载:https://docs.min.io/docs/minio-quickstart-guide.html ​ 访问上 ...

  6. NODE 基于express 框架和mongoDB的cookie和session认证 和图片的上传和删除

    源码地址 https://gitee.com/zyqwasd/mongdbSession 本项目的mongodb是本地的mongodb 开启方法可以百度一下 端口是默认的27017 页面效果 1. 注 ...

  7. 2020年12月-第02阶段-前端基础-CSS Day06

    CSS Day06 定位(position) 理解 能说出为什么要用定位 能说出定位的4种分类 能说出四种定位的各自特点 能说出我们为什么常用子绝父相布局 应用 能写出淘宝轮播图布局 1. CSS 布 ...

  8. 第一个Java代码的编写 :HelloWorld代码的编写

    HelloWorld代码的编写 创建一个新的文件夹,通过Notepad++编写第一个Java程序 , 文件名为"Hello.java" 在文件中编写,如下代码: public cl ...

  9. Promtail Pipeline 日志处理配置

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492144&idx=1&sn=a1cc13a642 ...

  10. mysql ERROR 1396 (HY000): Operation CREATE USER failed 解决办法

    原因:MySQL账户表中已经存在这个要创建的用户 操作分析: 当创建新用户时会提示这个新用户创建失败,但是当解决创建失败的问题后再次重新创建这个新用户,则会报这个错误 # 创建新用户,提示root用户 ...