Selenium实现多页面切换

当使用 Selenium 进行自动化测试或爬取数据时,有时需要处理多个页面之间的切换。以下是一些可能需要多页面切换的情况:

1、打开新窗口/页面:

在当前页面上点击链接、按钮或执行某些操作时,可能会打开一个新的窗口或页面。此时,需要切换到新的窗口或页面,以便在其中执行操作。

2、处理弹出窗口:

某些网站在操作期间可能会弹出新的窗口,例如弹出登录框、提示框等。在这种情况下,需要切换到弹出窗口进行操作。

3、处理 iframe 内嵌页面:

有些网页中包含了 iframe 元素,它们可以嵌入其他网页。如果需要与 iframe 中的内容进行交互,就需要切换到 iframe 所在的页面。

4、执行多个任务:

有时需要在不同的页面上执行不同的任务,例如在一个页面填写表单,然后在另一个页面上进行搜索并获取结果。在这种情况下,需要在不同的页面之间切换。

为了处理这些情况,Selenium 提供了一些方法来实现多页面的切换:

window_handles 属性:可以使用 driver.window_handles 获取当前所有打开窗口的句柄列表。每个窗口都有一个唯一的句柄标识。

switch_to.window(handle) 方法:可以使用 driver.switch_to.window(handle) 方法切换到指定的窗口句柄。这样可以将操作焦点从一个窗口切换到另一个窗口。

通过上述方法,可以在不同的页面之间切换,以执行所需的操作。

下面详细介绍如何使用 Selenium 实现多页面的切换:

1、首先,创建一个 WebDriver 对象。这可以是 ChromeDriver、FirefoxDriver等。

from selenium import webdriver 
driver = webdriver.Chrome() 

2、打开第一个页面。使用 get() 方法打开指定的 URL。

driver.get('http://www.example.com/page1') 

3、在第一个页面上查找并点击一个链接以打开新的页面。

link = driver.find_element_by_link_text('Open new page') 
link.click()

4、获取当前所有打开的窗口句柄列表。

window_handles = driver.window_handles

Selenium 使用 window_handles 属性来存储浏览器中当前打开的所有窗口句柄。每个窗口都有一个唯一的句柄。

5、切换到新的页面。

driver.switch_to.window(window_handles[1])

使用 switch_to.window() 方法切换到指定的窗口句柄。在上面的示例中,选择第二个窗口句柄来切换到新的页面。

现在,可以在新的页面上进行操作。

6、切换回原始页面。

driver.switch_to.window(window_handles[0])

使用 switch_to.window() 方法切换回第一个窗口句柄,也就是原始页面。

7、继续在原始页面上执行其他操作。

# 在原始页面上进行其他操作

8、最后,关闭浏览器。

driver.quit()

以上就是使用 Selenium 实现多页面切换的基本步骤。需要使用 window_handles 属性来获取所有窗口句柄,并使用 switch_to.window() 方法切换窗口句柄来实现页面切换。具体的代码和操作可能会根据实际情况有所不同,可以根据自己的需求进行适当的调整和扩展。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/211864.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【性能优化】JVM调优与写出JVM友好高效的代码

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…

U-boot(四):start_armboot

本文主要探讨210的uboot启动的第二阶段,主要函数为start_armboot。 uboot 一阶段初始化SoC内部部件(看门狗、时钟等),初始化DDR,重定位 二阶段初始化其余硬件(iNand、网卡芯片)以及命令、环境变量等 启动打印硬件信息,进入bootdelay,读秒完后执行bootc…

2002-2020年341个地级市农业保险收入数据

2002-2020年341个地级市农业保险收入数据 1、时间:2002-2020年 2、范围:341个地级市 3、指标:农业保险收入 4、来源:整理自wind、保险年鉴 5、指标解释: 农业保险保费收入是指保险公司从农户或农业生产经营者那里…

使用Arrays.Sort并定制Comparator排序解决合并区间

合并区间-力扣算法题56题 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入&am…

rabbit MQ的延迟队列处理模型示例(基于SpringBoot死信模式)

说明: 生产者P 往交换机X(typedirect)会发送两种消息:一、routingKeyXA的消息(消息存活周期10s),被队列QA队列绑定入列;一、routingKeyXB的消息(消息存活周期40s&#xf…

uboot中nfs和tftp方式获取文件

NFS文件系统挂载 服务器端配置如下 1.Server端需要安装NFS服务: sudo apt-get install nfs-kernel-server2.创建需要挂载的路径: mkdir -p /home/workspace/mercury/nfs_path3.创建共享目录: ①vim /etc/exports ②在文件中添加&#xff…

Vue3 封装组件库并发布到npm仓库

一、创建 Vue3 TS Vite 项目 输入项目名称,并依次选择需要安装的依赖项 npm create vuelatest 项目目录结构截图如下: 二、编写组件代码、配置项和本地打包测试组件 在项目根目录新建 package 文件夹用于存放组件 (以customVideo为例&a…

在 CentOS 7 上安装 MySQL 8

在 CentOS 7 上安装 MySQL 8 步骤 1: 添加 MySQL Yum 存储库 首先,我们需要添加 MySQL Yum 存储库。打开终端并执行以下命令: sudo yum install -y https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm步骤 2: 导入 MySQL GPG 公钥 …

Redis报错:JedisConnectionException: Could not get a resource from the pool

1、问题描述: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 2、简要分析: redis.clients.util.Pool.getResource会从JedisPool实例池中返回一个可用的redis连接。分析源码可知JedisPool 继承了 r…

爱奇艺的再进化:好内容强化溢出效应,会员长期价值凸显

作为长视频行业率先探索业绩良性成长路径的玩家,爱奇艺每一次的业绩质量,始终是观摩行业发展状态不可或缺的参照物。继历史最佳二季度之后,11月21日晚间,爱奇艺发布2023年第三季度业绩,再度强势打出原创内容高质量发展…

Arm64版本的centos编译muduo库遇到的问题的归纳

环境:Mac m2 pro下的VMware虚拟机中Arm64 centos ./build.sh 执行后提示如下 cmake -DCMAKE_BUILD_TYPErelease -DCMAKE_INSTALL_PREFIX…/release-install-cpp11 -DCMAKE_EXPORT_COMPILE_COMMANDSON /root/package/muduo-master – Boost version: 1.69.0 – Co…

机器学习/sklearn笔记:MeanShift

1 算法介绍 一种基于质心的算法通过更新候选质心使其成为给定区域内点的均值候选质心的位置是通过一种称为“爬山”技术迭代调整的,该技术找到估计的概率密度的局部最大值 1.1 基本形式 给定d维空间的n个数据点集X,那么对于空间中的任意点x的均值漂移…