Selenium 自动化 —— 切换浏览器窗口

更多内容请关注我的 Selenium 自动化 专栏:

  1. 入门和 Hello World 实例
  2. 使用WebDriverManager自动下载驱动
  3. Selenium IDE录制、回放、导出Java源码
  4. 浏览器窗口操作

平时我们在使用浏览器时,通常会打开多个窗口,然后再多个窗口中来回切换,这用鼠标点击或用键盘快捷键是很容易实现的。

但如果我们用 Selenium 自动化时呢?

回答是当然也可以。

1. 默认打开一个窗口

只要我们稍微留意就会发现,多次调用 get() 其实都是打开的同一个窗口,包括 back()forward() 都是在同一个窗口中。

driver.get("https://www.w3ccoo.com/html/html_forms.html");
Thread.sleep(3000);driver.get("https://www.baidu.com");
Thread.sleep(3000);

可以看到,两个网页是在同一个窗口中打开的。

2. 打开一个新窗口

那么我们怎么打开一个新窗口呢?
遗憾的时,Selenium WebDriver 并没有直接提供一个类似 newGet() 这样的方法打开新窗口。所以我们只能另辟蹊径。

这就是使用JS。对的,Selenium 也可以执行JavaScript!

driver.get("https://www.w3ccoo.com/html/html_forms.html");
Thread.sleep(3000);
((JavascriptExecutor) driver).executeScript("window.open();");
Thread.sleep(3000);

这样,就通过JS打开了一个新窗口。
在这里插入图片描述

3. 在新窗口中打开网页

接下来,我们继续,想办法在新打开的窗口中打开一个网页。
也许你会觉得很容易,这不是新打开一个窗口吗?直接调用 get() 方法不就行了?

时间是检验真理的唯一标准。

driver.get("https://www.w3ccoo.com/html/html_forms.html");
Thread.sleep(2000);((JavascriptExecutor) driver).executeScript("window.open();");
Thread.sleep(2000);driver.get("https://www.baidu.com");
Thread.sleep(2000);

很不幸,新的网页是在原来的窗口打开的。
在这里插入图片描述

有没有办法直接在新窗口打开网页呢?可以直接在open 方法中传参。

((JavascriptExecutor) driver).executeScript("window.open('https://www.baidu.com');");

4. 句柄

在介绍如何切换窗口前,我们先介绍句柄。

句柄就是浏览器窗口的唯一ID,就像它的身份证。

driver.get("https://www.w3ccoo.com/html/html_forms.html");
System.out.println(driver.getWindowHandle());

打印的是一串字符串:B761F78733881BCFA236385A487E3EBF

通过这个句柄,我们就能区别浏览器窗口!就可以来回切换。

5. 切换浏览器窗口

下面的代码,做的事情很简单:

  • 找到当前窗口的句柄
  • 打开一个新窗口
  • 拿到所有窗口的句柄
  • 出去步骤1中的窗口,剩下的就是新打开的窗口的句柄
  • 通过 switchTo() 和句柄,切换浏览器窗口
// 保存当前窗口句柄
driver.get("https://www.w3ccoo.com/html/html_forms.html");
log.info("当前URL:{}", driver.getCurrentUrl());
String originalWindowHandle = driver.getWindowHandle();
log.info("当前句柄:{}", originalWindowHandle);// 执行JavaScript来打开一个新窗口
((JavascriptExecutor) driver).executeScript("window.open('https://www.baidu.com');");
// 获取所有窗口的句柄列表
Set<String> windowHandles = driver.getWindowHandles();
// 找到新窗口的句柄
String newWindowHandle = null;
for (String handle : windowHandles) {if (!handle.equals(originalWindowHandle)) {newWindowHandle = handle;break;}
}
log.info("新句柄:{}", newWindowHandle);
log.info("-------切换后");
driver.switchTo().window(newWindowHandle);
log.info("当前URL:{}", driver.getCurrentUrl());
log.info("当前句柄:{}", driver.getWindowHandle());

到这里,我们已经可以用 Selenium 自由切换浏览器窗口了。关注CSDN - 兰亭序咖啡,和我一起学习探讨 Selenium 自动化和其它技术。

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

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

相关文章

众邦科技CRMEB商城商业版任意文件写入getshell 0day

代码审计 接口&#xff1a;/adminapi/system/crud 处理的代码如下 public function save(SystemCrudDataService $service, $id 0){$data $this->request->postMore([[pid, 0],//上级菜单id[menuName, ],//菜单名[tableName, ],//表名[modelName, ],//模块名称[table…

手机网页视频无水印采集工具|抖音视频关键词批量下载软件

轻松获取手机网页视频无水印的神器&#xff01;让您随心所欲畅享精彩视频内容&#xff01; 随着网络视频的盛行&#xff0c;如何方便快捷地获取您感兴趣的视频内容成为一大需求。现推出一款手机网页视频无水印采集工具&#xff0c;功能强大&#xff0c;操作简便&#xff0c;助您…

[项目前置]如何用webbench进行压力测试

测试软件 采用webbench进行服务器性能测试。 Webbench是知名的网站压力测试工具&#xff0c;它是由Lionbridge公司开发。 webbench的标准测试可以向我们展示服务器的两项内容&#xff1a; 每秒钟相应请求数 和 每秒钟传输数据量 webbench测试原理是&#xff0c;创建指定数…

03-CSS盒模型(padding、margin、opactiy、cursor、display、css3前缀)

一、CSS盒模型 CSS 盒模型规定了处理元素内容、内边距、边框 和 外边距 的方式。最内部分是元素内容&#xff0c;直接包围内容的是内边距。内边距呈现了元素的背景。内边距的边缘是边框。边框以外是外边距。 1.元素的尺寸: height 设置元素的高度。属性值&#xff1a;auto&am…

开源流程图表库(01):Mermaid.js生成流程图、时序图、甘特图等

一、Mermaid.js的特点 Mermaid.js是一个用于生成流程图、时序图、甘特图等各种图表的开源库。它使用简洁的文本语法来描述图表结构&#xff0c;并将其转换为可视化的图形。 Mermaid.js的主要特点包括&#xff1a; 简洁易用&#xff1a;Mermaid.js使用简单的文本语法来描述图表…

FPGA电平标准

1.LVTTL&#xff1a;&#xff08;3.3v&#xff09; 2.LVCOMS&#xff1a;&#xff08;1.8v&#xff09; 3.LVDS&#xff08;1.8v&#xff09;&#xff1a;LVDS_25&#xff08;2.5v&#xff09; 4&#xff1a;如果是ddr3与fpga相连接fpga的vcco推荐&#xff08;1.5v&#xff09;…

Qt实现简易的多线程TCP服务器(支持多个客户端连接)附源码

目录 一.UI界面的设计 二.服务器的启动 三.实现自定义的TcpServer类 1.在widget中声明自定义TcpServer类的成员变量 2.在TcpServer的构造函数中对于我们声明的m_widget进行初始化&#xff0c;m_widget我们用于后续的显示消息等&#xff0c;说白了就是主界面的更新显示等 …

卡尔曼滤波器_3.3

目标 了解卡尔曼滤波在目标跟踪中的应用知道卡尔曼滤波的原理&#xff1a;预测阶段和更新阶段 卡尔曼滤波器&#xff08;Kalman Filter&#xff09;是一种利用线性系统理论和概率统计原理&#xff0c;对含有噪声的动态系统进行状态估计的最优滤波器。它由匈牙利裔美国电气工程…

web前端之3D标签动画、指定范围的随机数、动态设置css变量、文档片段对象、反向动画

MENU 效果图htmlJavaScriptstyle 效果图 html <div class"container"></div>JavaScript // 祝词 var words [健康码常绿,股票飙红,生意兴隆,财源广进,心想事成,永远十八,身体健康,大富大贵,大吉大利,万事如意,美梦成真,吉祥如意,鸿运当头,五福临门,吉…

正式发布:VitePress 1.0 现代化静态站点生成器!

大家好&#xff0c;我是奇兵&#xff0c;今天介绍一下现代化静态站点生成器!&#xff0c;希望能帮到大家。 3 月 21 日&#xff0c; 由 Vue 团队出品的现代化静态站点生成器 VitePress 正式发布 1.0 版本&#xff01;它专为构建快速、以内容为中心的网站而生&#xff0c;能够轻…

Apache Spark

一、Apache Spark 1、Spark简介 Apache Spark是用于大规模数据 (large-scala data) 处理的统一 (unified) 分析引擎。 Spark官网 Spark最早源于一篇论文Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing,该论文是由加州大学柏…

C# 将 Word 转文本存储到数据库并进行管理

目录 前言 1. 创建数据库表格 2. 安装必需的 NuGet 包 3. 转换 Word 文档为文本 4. 将文本存储到数据库 5. 完整示例 前言 C# 是一种通用的编程语言&#xff0c;可以用于开发各种类型的应用程序&#xff0c;包括处理文本和数据库管理。在这篇文章中&#xff0c;我将向您…

问卷调查数据分析指南!掌握方法,精准把握用户需求!

“我们可以用自定义报表、交叉报表、自定义过滤器等放方式进行问卷调查数据分析。“ 问卷调查的过程中&#xff0c;问卷设计、问卷分发、问卷收集可能都不是让我们最头疼的。经过几天的奋战&#xff0c;终于拿到了数据&#xff0c;但是问题也随之而来。收集上来的问卷信息&…

linux操作系统——线程控制+线程封装

1.理解用户级线程 我们前面用到的所有跟线程有关的接口全部都不是系统直接提供的接口&#xff0c;而是原生线程库pthread提供的接口。我们前面谈到了由于用户只认线程&#xff0c;而linux操作系统是通过用轻量级进程模拟线程&#xff0c;并不是真正的线程&#xff0c;所以linu…

C# for/foreach 循环

一个 for 循环是一个允许您编写一个执行特定次数的循环的重复控制结构。 语法 C# 中 for 循环的语法&#xff1a; for ( init; condition; increment ) {statement(s); } 下面是 for 循环的控制流&#xff1a; init 会首先被执行&#xff0c;且只会执行一次。这一步允许您声…

【数据结构】非线性结构——二叉树

文章目录 前言1.树型结构1.1树的概念1.2树的特性1.3树的一些性质1.4树的一些表示形式1.5树的应用2.二叉树 2.1 概念2.2 两种特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储2.5 二叉树的基本操作 前言 前面我们都是学的线性结构的数据结构&#xff0c;接下来我们就需要来学习非…

Stable Diffusion 进阶教程 - 二次开发(制作您的文生图应用)

目录 1. 引言 2. 基于Rest API 开发 2.1 前置条件 2.2 代码实现 2.3 效果演示 2.4 常见错误 3. 总结 1. 引言 Stable Diffusion作为一种强大的文本到图像生成模型&#xff0c;已经在艺术、设计和创意领域引起了广泛的关注和应用。然而&#xff0c;对于许多开发者来说&#xff…

iOS开发进阶(九):OC混合开发嵌套H5应用并互相通信

文章目录 一、前言二、嵌套H5应用并实现双方通信2.1 WKWebView 与JS 原生交互2.1.1 H5页面嵌套2.1.2 常用代理方法2.1.3 OC调用JS方法2.1.4 JS调用OC方法 2.2 JSCore 实现原生与H5交互2.2.1 OC调用H5方法并传参2.2.2 H5给OC传参 2.3 UIWebView的基本用法2.3.1 H5页面嵌套2.3.2 …

Spring Boot | SpringBoo“开发入门“

目录 : 1.SpringBoot的“介绍”SpringBoot”概述” &#xff1a;SpringBoot”简介“SpringBoot的“优点” 2. SpringBoot入门程序环境准备使用 “Maven”方式构建SpringBoot 项目使用“Spring Initializr”方式构建Spring Boot 项目 3. “单元测试” 和“热部署”单元测试热部署…

微服务day06 -- Elasticsearch的数据搜索功能。分别使用DSL和RestClient实现搜索

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一…