

Selenium4+Python3系列(五) - 多窗口处理之句柄切换 - 久曲健
source link: https://www.cnblogs.com/longronglang/p/16842063.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

感觉到很惭愧呀,因为居然在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
系列教程,未完待续····
__EOF__
Recommend
-
22
1.窗口、控件的指针和句柄的相互转化 1)指针转化为句柄在MFC应用程序中首先要获得窗口的指针,然后将其转化为句柄 CWnd* pWnd; HANDLE hWnd = pWnd->GetSafeHwnd(); 2)句柄转化为指针在MFC应用程序中首先获得对话框控...
-
9
一、写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏、转发! 二、元素的状态 在操作元素之前,我们需要了解元素的常见状态。
-
7
我所在的城市昨天出了近20+的阳性案例,但这丝毫没有 “影响” 到996的工作时间,当然,也没有影响到我想继续更新文章的决心。 一、cookie常用操作入门 上一篇有写过关于cookie的实战案例,个人觉得没有很...
-
6
我所在的城市昨天出了近20+的阳性案例,但这丝毫没有 “影响” 到996的工作时间,当然,也没有影响到我想继续更新文章的决心。 一、cookie常用操作入门 上一篇有写过关于cookie的实战案例,个人觉得没有很好地照顾到入门同学...
-
8
一、上传文件操作 上传文件是每个做自动化测试同学都会遇到,而且可以说是面试必考的问题,标准控件我们一般用send_keys()就能完成上传, 但是我们的测试网站的上传控件一般为自己封装的,用传统的上传已经不好用了, 也就是说...
-
9
一、上传文件操作 上传文件是每个做自动化测试同学都会遇到,而且可以说是面试必考的问题,标准控件我们一般用send_keys()就能完成上传, 但是我们的测试网站的上传控件一般为自己封装的,用传统的上传已经不好用了...
-
6
Page Object(PO)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一。在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一定的对象,然后再进行组织。 相信每个做自动化测...
-
6
Page Object(PO)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一。在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一定的对象,然后再进行组织。 相信每个做自动化测...
-
9
写在前面: Page Object模式,目的是将元素定位和元素操作分层,只接触测试内容,不写基础内容,便于后续对自动化测试用例体系的维护,这是中心思想,也是核心。 那么我们继续将简洁延续...
-
9
Selenium4+Python3系列(十二) - 测试框架的设计与开发 - 久曲健 - 博客园 自己从未没想过能使用python来做自动化测试框架的设计、开发...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK