在浏览网页的时候,有时点击一个链接或者按钮,会弹出一个新的窗口。

使用 Selenium 进行 Web 自动化测试,如果弹出新窗口时,没有对窗口进行切换,那么,WebDriver 对象 的焦点对应的,依然是旧窗口,后续的自动化操作,将继续在旧窗口中进行。

实例验证

# 模拟场景:打开百度,点击左上角“视频”链接,打印出当前`WebDriver 对象` 对应的窗口信息
from selenium import webdriver
from time import sleepdriver = webdriver.Chrome()  # 打开浏览器
driver.maximize_window()  # 浏览器最大化
driver.get("https://www.baidu.com/")  # 跳转至百度首页
sleep(1)
element = driver.find_element_by_xpath("//div[@id='s-top-left']/a[4]")  # 定位“视频”元素
element.click()  # 点击
sleep(1)
print(driver.title)  # 百度一下,你就知道
print(driver.current_url)  # https://www.baidu.com/driver.quit()  # 关闭浏览器

根据程序的打印结果可知,窗口依然停留在百度首页,当前的 url :https://www.baidu.com/,由此可推断,Selenium 没有按照我们预期那样,自动切换到新的窗口。

考虑到后续的操作步骤都需要在新窗口进行,就需要对进行窗口切换,Selenium 提供的窗口切换方法是:

WebDriver.switch_to.window()

WebDriver 对象有 window_handles 属性,返回一个列表,里面记录了当前浏览器所有的窗口句柄。

句柄:对应窗口的 id

# 获取当前浏览器上所有窗口句柄
from selenium import webdriver
from time import sleepdriver = webdriver.Chrome()  # 打开浏览器
driver.get("https://www.baidu.com/")  # 跳转至百度首页
sleep(1)
element = driver.find_element_by_xpath("//div[@id='s-top-left']/a[4]")  # 定位“视频”元素
element.click()  # 点击
sleep(1)
print(driver.current_window_handle)  # 当前浏览器句柄:CDwindow-1FABF3D9B0B190F9883E66F25481738E
print(driver.window_handles)  # 获取所有句柄:['CDwindow-1FABF3D9B0B190F9883E66F25481738E', 'CDwindow-0871993F618FDBE540426562AEA2FB32']
for handle in driver.window_handles:print(handle)driver.quit()  # 关闭浏览器

因为 window_handles 返回的是一个列表,所以,可以通过列表下标来更换当前浏览器的窗口句柄,来实现窗口的自由切换:

# 模拟场景:通过百度首页,打开 hao123,再通过 hao123 点击京东,进入京东首页,搜索“笔记本电脑”
from selenium import webdriver
from time import sleepdriver = webdriver.Chrome()  # 打开浏览器
driver.get("https://www.baidu.com/")  # 跳转至百度首页
sleep(1)
element = driver.find_element_by_xpath("//div[@id='s-top-left']/a[2]")  # 定位“hao123”元素
element.click()  # 点击
sleep(1)
windows1 = driver.window_handles  # 获取所有窗口句柄
print(windows1)  # 打印句柄列表
print(driver.current_window_handle)  # 打印切换前的句柄
driver.switch_to.window(windows1[-1])  # 切换到最后一个句柄
print(driver.current_window_handle)  # 打印切换后的句柄
element1 = driver.find_element_by_xpath("//li[@data-id='11']//a[1]")  # 在 hao123 定位 京东
element1.click()  # 点击
windows2 = driver.window_handles  # 第二次获取所有窗口句柄
print(windows2)  # 打印句柄列表
print(driver.current_window_handle)  # 打印切换前的句柄
driver.switch_to.window(windows2[-1])  # 第二次切换到最后一个句柄
print(driver.current_window_handle)  # 打印切换后的句柄
element2 = driver.find_element_by_xpath("//input[@aria-label='搜索']")  # 定位搜索输入框
element2.send_keys("笔记本电脑")  # 输入内容
element3 = driver.find_element_by_class_name("button")  # 定位搜索按钮
element3.click()  # 点击
sleep(3)driver.quit()  # 关闭浏览器

通过这个实例操作,可以看到,每一次切换窗口,都需要对获取到最新的句柄位置。

同样,由于 WebDriver.window_handles 返回的是一个列表,也可以通过下标值来切换到旧的窗口。

总结

Selenium 窗口切换相关推荐

  1. selenium窗口切换

    说明:本篇博客基于selenium 4.1.0 场景说明 场景:点击某个按钮后,页面是在一个新的浏览器中出现.如百度的'更多'按钮 问题:浏览器可能自动切换到了新页面,但是selenium的drive ...

  2. selenium窗口切换和关闭指定窗口

    ws=driver.window_handles[] driver.switch_to.window(ws) ws=driver.window_handles[] 获得指定索引窗口句柄 driver. ...

  3. Python+Selenium学习笔记8 - 多表单多窗口切换

    1.多表单切换 下图为待测页面:内嵌百度首页 切换到百度首页进行操作 1 #coding = utf-8 2 3 from selenium importwebdriver4 importos5 im ...

  4. python页面切换_Python+Selenium学习--窗口切换及操作元素

    场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...

  5. python3 + selenium 之窗口切换

    窗口切换 此代码来源学习后对淘宝操作实践记录: 以下代码在Chrome61和IE11上正常运行,Firefox5.7上运行存在一些问题须改进,应该是火狐不兼容差link_text部分和循环经常报错,在 ...

  6. 【Selenium】切换/窗口切换

    文章目录 1 frame切换 1.1 切换到frame 1.2 切回原来的主html 1.3 示例 2 窗口切换 2.1 切换新窗口 2.2 切回原来的窗口 2.3 示例 1 frame切换 1.1 ...

  7. selenium 自动化 携带cookies模拟登陆哔哩哔哩并发送弹幕和评论(解决多窗口切换、规避检测、评论无法输入等问题)

    获取cookies之后就可以自动登陆到哔哩哔哩,点击搜索到的视频,然后输入弹幕,发送弹幕,再点击评论,发送评论,这里有个问题就是运行几次之后发现评论直接sed_keys的话,会出现输入不进去的情况,然 ...

  8. python selenium元素定位、alert操作、iframe切换、多窗口切换、键盘操作、鼠标操作、js操作、操作本地文件、css高级操作

    用了那么久的selenium,整理一篇自己经常用到的标签和方法 本文档持续更新优化,喜欢的小伙伴可以点赞收藏一下 文章目录 1. 通用元素定位方法,需要引入By. 2. 通用多个元素查找By 3. c ...

  9. Web自动化测试Selenium(4)frame切换/窗口切换/选择框-2021-10-09

    1. frame切换 1.1 问题描述 选择 class 属性值为 plant 的元素. elements = wb.find_element_by_css_selector('.plant') 表示 ...

最新文章

  1. 机器学习笔试题精选(五)
  2. XMPP协议学习笔记三(Openfire服务器端搭建开发环境)
  3. python基础代码事例-推公式到写代码-python基础
  4. DzzOffice1.0 Beta2发布
  5. 管理员账号无权限写入注册表
  6. 为什么你的记忆总会越来越模糊?
  7. python网页运行环境_Python小牛叔Web开发1:安装Visual Studio Code配置Python运行环境...
  8. JEE7:展望新时代
  9. 对几个重要问题的阐述
  10. 经典面试题(6):NaN 是什么?如何测试一个值是否等于 NaN ?
  11. SSM、SSH框架原理
  12. HTML5视频放完自动跳转,炫酷html5 网站视频自动跳转代码,零基础秒学
  13. Kettle(Pentaho Data Integration) 下载安装使用介绍/功能汇总
  14. 珠海空号检测的运行原理
  15. Js获取时间-天干地支空亡
  16. DeepMOT: A Differentiable Framework for Training Multiple Object Trackers
  17. Regex 量词Quantifier 分组group
  18. 【随机过程】课后作业 1-条件概率期望密度
  19. 计算机主机开机 风扇没有转动,电脑开机黑屏,电源风扇和CPU风扇都正常转动,但是显示器无任何显示,正常的一声滴,萤幕什么都不显示...
  20. (2)防火墙的基本配置---1安全域和端口

热门文章

  1. 一步步实现SDDC--学习平台环境的搭建
  2. python企业微信特定用户_python3调用企业微信api!开发一款属于自己的企业微信...
  3. UIViewController加载过程
  4. 近似推断---变分线性回归
  5. 转://工作中 Oracle 常用数据字典集锦
  6. WIN7网络共享打印机设置 家庭工作组
  7. 解决jquery调用NET webservice跨域的问题
  8. Solr4.3整合到Tomcat中并添加MMSeg4j中文分词器
  9. GPUImage组合滤镜
  10. oracle连接中出现错误ORA-12541,ORA-12514,ORA-01017的解决方法