当前位置: 首页 > news >正文

Selenium基础 — 多窗口操作

1、多标签/多窗口之间的切换

场景:
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口上进行操作。这种情况下,需要识别多标签或窗口的情况。
操作方法:

  • switch_to.window()方法:切换窗口。可以实现在不同的窗口之间切换。
  • current_window_handle: 获得当前窗口句柄。
  • window_handles: 获取所有窗口句柄。

提示:句柄就可以理解成浏览器窗口的id值。

操作说明:

  1. 获取所有窗口的句柄
    handles = driver.window_handlers
    调用该方法会得到一个列表,在selenium运行过程中的每一个窗口,都有一个对应的值存放在里面。
    (换句话说,有多少个窗口,就有多少个句柄)
  2. 通过窗口的句柄进入的窗口
    driver.switch_to_window(handles[n])

2、练习

"""
1.学习目标:
    必须掌握web中多窗口切换方法
2.语法(操作步骤)
    2.1 获取当前窗口句柄
        driver.current_window_handle
    2.2 点击页面中的超链接触发多窗口
    2.3 获取所有窗口句柄
        driver.window_handles
    2.4 进入新窗口
        switch_to.window(handles[1])
    2.5 操作新窗口中的元素
        按实际工作需求编写
    2.6 退出新窗口
        switch_to.window(handles[0])

3.需求
    在页面中,实现多窗口切换。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep

# 2.打开浏览器
driver = webdriver.Chrome()

# 3.打开我的Python文档页面
url = "https://blog.csdn.net/Liuyuelinjiayou/article/details/105789238"
driver.get(url)
sleep(2)

# 4. 多窗口切换操作
# 4.1 获取当前窗口句柄
handle = driver.current_window_handle
print('点击之前的窗口句柄是:', handle)
print('点击前的url:', driver.current_url)

# 4.2 点击页面中的超链接触发多窗口
driver.find_element_by_link_text("PyCharm下载与安装").click()
sleep(2)

# 4.2 获取所有窗口句柄
handles = driver.window_handles

# 4.3 进入新窗口
driver.switch_to.window(handles[1])
print('点击之后浏览器所有的窗口句柄是:', handles)
print('点击后的url:', driver.current_url)

# 4.5 退出新窗口
# 你需要退到哪个窗口就写哪个窗口的handle索引
# 因为handle在上边赋值等于第一个窗口了,这里就可以写handle
# 也可以写handles[0]
driver.switch_to.window(handle)
sleep(10)

# 5.关闭浏览器
driver.quit()

"""
输出结果:
点击之前的窗口句柄是: CDwindow-6F1E6437F354913663E6A7E5A1486784
点击前的url: https://blog.csdn.net/Liuyuelinjiayou/article/details/105789238

点击之后浏览器所有的窗口句柄是: ['CDwindow-6F1E6437F354913663E6A7E5A1486784', 'CDwindow-48640D53F053821ED38D21B87E549A73']
点击后的url: https://blog.csdn.net/Liuyuelinjiayou/article/details/105729957
"""

最后我这里给你们分享一下我所积累和真理的文档和学习资料有需要是领取就可以了

1、学习思路和方法

这个大纲涵盖了目前市面上企业百分之99的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习

2、想学习却无从下手,该如何学习?

这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。

3、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

4、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看

最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦

相关文章:

  • Nginx之动静分离
  • 怎么成为稚晖君?
  • 离线数仓 (四) --------- 用户行为数据采集模块
  • HACKTHEBOX——Valentine
  • 哈佛结构和冯诺依曼结构
  • 【黄啊码】MySQL入门—7、这些函数运用得好,高级工程师都直呼内行
  • UnityPackageManager相关
  • 数字图像处理——基本运算
  • Cosmos模块化功能链 走向亿级用户的超级Dapp时代
  • 【黑马程序员名师pink老师讲HTML】HTML很容易忘记?有它我不慌的
  • .NetCore项目nginx发布
  • 主流开源OLAP对比分析
  • 二叉搜索树的基本操作 || TreeMap和TreeSet介绍
  • 超详细的数据结构---顺序表的有关教程
  • Exchange Server 2016 安装部署
  • 【Leetcode】101. 对称二叉树
  • 【译】JS基础算法脚本:字符串结尾
  • [LeetCode] Wiggle Sort
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • centos安装java运行环境jdk+tomcat
  • golang中接口赋值与方法集
  • HTML5新特性总结
  • java概述
  • Object.assign方法不能实现深复制
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Travix是如何部署应用程序到Kubernetes上的
  • windows-nginx-https-本地配置
  • 基于 Babel 的 npm 包最小化设置
  • 漂亮刷新控件-iOS
  • 如何在GitHub上创建个人博客
  • 微信小程序开发问题汇总
  • 优秀架构师必须掌握的架构思维
  • 06-01 点餐小程序前台界面搭建
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​【已解决】npm install​卡主不动的情况
  • #NOIP 2014#Day.2 T3 解方程
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • #在 README.md 中生成项目目录结构
  • (09)Hive——CTE 公共表达式
  • (1)(1.9) MSP (version 4.2)
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (离散数学)逻辑连接词
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)C#调用WebService 基础
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .Net 6.0 处理跨域的方式
  • .NET Core 2.1路线图
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 反射的使用
  • .net和php怎么连接,php和apache之间如何连接
  • @RequestMapping 的作用是什么?