写在前面感觉到很惭愧呀,因为居然在Selenium+Java
系列中没有写过多窗口处理及句柄切换的文章,不过也无妨,不管什么语言,其思路是一样的,下面我们来演示,使用python
语言来实现窗口句柄的切换 。
什么是窗口句柄可能有的同学会问了,到底啥是窗口,什么又是多窗口,句柄到底是啥玩楞?
【五 Selenium4+Python3系列 - 多窗口处理之句柄切换】那么,他到底长啥样?如下图所示:
文章插图
怎么处理多窗口句柄如何获取窗口句柄
语法:
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_urlif '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_urlif '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 timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom webdriver_manager.chrome import ChromeDriverManagerfrom 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_handleprint('当前窗口句柄为:{0}'.format(old_Window))driver.find_element(By.LINK_TEXT, "久曲健 - 博客园").click()time.sleep(2)window_handles = driver.window_handlesprint(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_urlif 'cnblogs' in newUrl:print(driver.title)else:driver.close()'''# 关闭新窗口句柄,切回原来主页for window_handle in window_handles:driver.switch_to.window(window_handle)newUrl = driver.current_urlif 'cnblogs' in newUrl:driver.close()else:print(driver.title)driver.quit()
写在最后最近心情还是很不好,恐慌的不是单身可怕,而是年纪越来越大,也不知道现在的女孩都在想什么,好想结婚呀!
经验总结扩展阅读
- 鸡皮疙瘩第五关拼车怎么过
- 索尼电视哪个系列好 Z系列定价为何如此高
- 五行缺金小男孩名字罗姓 罗姓属金的男孩名字大全
- 索尼电视哪个系列好 那么索尼和三星电视哪个好呢
- 龙宝宝年新生儿五行缺木取名用什么字 推荐好听的男宝宝名字
- 原神在弹弹菇上连续弹跳五次怎么完成
- 每日穿衣颜色指南2023年9月23日 五行穿衣每日指南
- 学习ASP.NET Core Blazor编程系列九——服务器端校验
- 2023年农历七月十五结婚吉利吗 是黄道吉日吗
- 2023年农历七月二十五结婚怎么样 是不是吉祥的日子