【selenium】三大切换 iframe 弹窗alert 句柄window 和 鼠标操作

news2024/9/21 2:44:19

目录

一、iframe

1、切换方式:

1、第一种情况:

2、第二种情况:

方式1:

先找到iframe,定位iframe元素(可以通过元素定位的各种方式:xpath,css等等),用对象接收,再去跳转

方式2:通过frame序号——不推荐⚠️

2、跳转到父级iframe中

3、切换到默认iframe

总结:

二、切换Alert(提示框)

三、切换Window 句柄

四、鼠标操作


一、iframe

当想要定位iframe中的元素时,由于driver的焦点还停留在原页面,我们在iframe新的页面上定位元素时,自然会产生错误:【报错:no such element: Unable to locate element】

所以我们需要将driver的焦点切换到iframe页面中。

java中iframe的三个重载方法

1、切换方式:

1、第一种情况:

frame有具体的name 和 id 属性(id和name的属性值如果是动态变化的数字 就不能使用)

——直接通过id或name属性切换iframe

driver.switchTo().frame("mainFrame");
2、第二种情况:

frame标签本身没有id 和 name 属性 或者 其是动态

方式1:
先找到iframe,定位iframe元素(可以通过元素定位的各种方式:xpath,css等等),用对象接收,再去跳转
WebElement mainFrame = driver.findElementByName("mainFrame");
driver.switchTo().frame("mainFrame");
方式2:通过frame序号——不推荐⚠️
 # 根据需要填入index,这里定位HTML里的第一个
iframe = driver.find_elements_by_tag_name("iframe")[0]  
driver.switch_to.frame(iframe)

2、跳转到父级iframe

如果是顶级iframe,不会有任何变化

driver.switchTo().parentFrame()

3、切换到默认iframe

一般就是最外层网页。当有超过两层以上的iframe嵌套,使用此方法可直接跳到最外层

driver.switchTo().defaultContent()

总结:

iframe往内层iframe进,只能一层层进,跳出去可以直接跳出最外面,iframe是一层一层往里面切

二、切换Alert(提示框)

  1. alert.getText()——获取警告框中的提示信息
  2. alert.accept()——点击确认按钮
  3. alert.dismiss()——取消

alert 操作示例:

alert 页面代码:

<!DOCTYPE html>
	<html>
	<head>
		<title>a.html</title>
	</head>
	<body>
		<input type="text" name="">

	</body>
	<script type="text/javascript">
		//confirm(确认到充值么)
		if(confirm("确认到充值么?")){
			alert("充值成功")
		}
		else{
			alert("取消充值")
		}
	</script>
</html>

alert操作代码:

//得到alert框
Alert alert = driver.switchTo.alert();
//获取内容
System.out.println(alert.getText());
//点击取消
alert.dismiss();
//再次点击确定 可以在alert原来操作的基础上直接再次点击
alert.accept();

三、切换Window 句柄

当我们点击了 a 标签元素时,会触发打开链接页面的事件,有两种情形:

  1. 在当前窗口加载新页面内容

  2. 新建一个窗口加载新页面内容,这种情况在 a 标签有 target="_blank" 时触发

当发生第2种情况时,同iframe类似,我们需要切换窗口

切换方式:

传入要操作窗口的handle句柄 --窗口的标识,唯一,并且是一串字符串来的

句柄(handle):selenium为每一个窗口分配的值,每一次都是不同的

切换方式:

driver.switchTo.window(nameOrHandle);

name一般没人用,Handle句柄,如何获取到窗口的句柄呢:

driver.getWindowHandle();获取当前操作窗口的句柄,返回set集合,无序
driver.getWindowHandles();获取测试时打开的所有窗口句柄

四、鼠标操作

自动化测试时,有些元素不适合直接点击或者进行某些操作时,可以使用Selenium的Actions类(鼠标操作类)来模拟鼠标键盘操作,通过Actions对象可以发起鼠标左键、右键、移动鼠标等操作,最后使用perform方法执行操作。

clickAndHold() //在特定元素上单击鼠标左键(不释放)
release() //在特定元素上释放鼠标左键
doubleClick() //在特定元素上双击鼠标左键
moveToElement() //移动鼠标指针到特定元素
contextClick() //在特定元素上右键单击
dragAndDrop() //拖拽元素

perform() //执行具体的操作,前面6个方法都是声明一个操作,只有调用perform()后才会真正执行操作

Actions:  在操作一个页面元素的时候需要一连串的动作配合的时候,可以使用Actions来完成

//鼠标操作类
//创建对象
Actions action = new Actions(driver);
​
actions.clickAndHold(onElement).moveToElement(toElement).release().build().perform();

案例:ZTREE DEMO - drag & drop

拖拽一个元素到另一个元素的位置

   //按住一个元素,移动到另一个元素处,释放
action.clickAndHold(treeDemo_2_span).moveToElement(treeDemo_11_span).release().perform();
   //拖拽 dragAndDrop(源,目标)  同上面效果一样
action.dragAndDrop(treeDemo_2_span,treeDemo_11_span).perform();

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

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

相关文章

vue后台管理添加水印简单方式watermark-package

详情参考:https://www.npmjs.com/package/watermark-package 示例方法 <el-button type"primary" click"AddWatermark">添加水印</el-button><el-button type"primary" click"RemoveWatermark">清除水印</el-but…

7 个值得收藏的 Python 身份验证库

在数字化转型时代&#xff0c;每一个数据字节都成为潜在的金矿&#xff0c;保护数据变得至关重要。将数字领域视为一座古老的宫殿&#xff0c;虽然里面装饰着宝藏&#xff08;读&#xff1a;数据&#xff09;&#xff0c;但大门&#xff08;读&#xff1a;身份验证&#xff09;…

Qt 事件

1. 事件 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件&#xff0c;它继承自QEvent类。 2. 事件和信号 事件与信号并不相同&#xff0c;比如我们使用鼠标点击了一下界面上的按钮&#xff0c;那么就会产生…

信钰证券:炒股死记8句口诀?新手须知!

炒股死记以下8句口诀&#xff1a; 1、早上大跌可加仓&#xff0c;早上大涨要减仓 当个股在开盘后呈现大跌的状况&#xff0c;很有可能是主力在使用低开进行洗盘操作&#xff0c;散户能够考虑在此刻加仓&#xff0c;等股价反弹时&#xff0c;好做T卖出&#xff0c;赚取一定的差…

【Appium UI自动化】pytest运行常见错误解决办法

通过Appium工具录制代码在pycharm上运行报错&#xff1a; 错误一&#xff1a; 1.提示 setup() 方法运行 error failed 解决办法&#xff1a;未创建 init __ 方法&#xff0c;创建一个空的__init.py文件就解决了。 原因&#xff1a; 错误二&#xff1a; 2.运行代码&#xff…

文心一言 VS 讯飞星火 VS chatgpt (199)-- 算法导论15.2 1题

一、用go语言&#xff0c;对矩阵规模序列(5&#xff0c;10&#xff0c;3&#xff0c;12&#xff0c;5&#xff0c;50&#xff0c;6)&#xff0c;求矩阵链最优括号化方案。 文心一言&#xff0c;代码正常运行&#xff1a; 在Go语言中&#xff0c;为了找到矩阵链乘法的最优括号…

船舶制造5G智能工厂数字孪生可视化平台,推进船舶行业数字化转型

船舶制造5G智能工厂数字孪生可视化平台&#xff0c;推进船舶行业数字化转型。随着数字化时代的到来&#xff0c;船舶行业正面临着前所未有的机遇与挑战。为了适应这一变革&#xff0c;船舶制造企业需要加快数字化转型的步伐&#xff0c;提高生产效率、降低成本并增强市场竞争力…

C 嵌入式系统设计模式 09:硬件适配器模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之二&…

JAVA毕业设计128—基于Java+Springboot+Vue的共享单车租赁管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的共享单车租赁管理系统(源代码数据库)128 一、系统介绍 本项目前后端分离&#xff0c;本系统分为管理员、用户两种角色 1、用户&#xff1a; 注册、登录、…

Java学习笔记2024/2/22

面向对象进阶部分学习方法&#xff1a; 特点&#xff1a; 逻辑性没有那么强&#xff0c;但是概念会比较多。 记忆部分重要的概念&#xff0c;理解课堂上讲解的需要大家掌握的概念&#xff0c;多多练习代码。 今日内容 复习回顾 static关键字 继承 教学目标 能够掌握st…

【移动安全】MobSF联动安卓模拟器配置动态分析教程

原文链接 MobSF联动安卓模拟器配置动态分析教程 实现方式 Windows开启安卓模拟器并进行相关配置作为调试客户端&#xff0c;Linux使用docker开启MobSF作为服务端。 好处&#xff1a;干净&#xff0c;部署简单&#xff0c;不用安装乱七八糟的环境&#xff0c;防止破坏其他应…

SpringCloud(14)之SpringCloud Consul

我们知道 Eureka 2.X 遇到困难停止开发了&#xff0c;所以我们需要寻找其他的替代技术替代Eureka&#xff0c;这一小 节我们就讲解一个新的组件Consul。 一、Consul介绍 Consul 是 HashiCorp 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其它分布式…

【k8s核心概念与专业术语】

k8s架构 1、服务的分类 服务分类按如下图根据数据服务支撑&#xff0c;分为无状态和有状态 无状态引用如下所示&#xff0c;如果一个nginx服务&#xff0c;删除后重新部署有可以访问&#xff0c;这个属于无状态&#xff0c;不涉及到数据存储。 有状态服务&#xff0c;如redis&a…

音视频技术-电脑连接调音台时交流声的产生与消除

当电脑(笔记本/台式机)声卡通过音频线与调音台(或扩音机)连接时,能听到“交流声”。有时很轻微,有时很明显,甚至干扰正常的演讲或发言。 很多时候,我们在台上演讲时,都会使用电脑播放PPT,遇到视频时,还需要将视频中的音频扩大。电脑音频的输出口一般都是3.5的,我们…

Flutter常用命令,持续更新

目录 前言 Flutter 常用命令 Dart 常用命令 adb 常用命令&#xff08;用于 Android 开发&#xff09; 前言 当在开发Flutter项目时&#xff0c;熟悉一些常用的命令是非常重要的。这些命令可以帮助你执行各种任务&#xff0c;从构建应用程序到调试和测试。以下是一些Flutte…

SQL注入:sqli-labs 46关(order by注入)

sqli-lab靶场的46关是需要使用order by注入的 通过页面提示我们可以给sort传入一个值&#xff0c;那么尝试传入id&#xff1a; 可以看到是基于id排序的结果显示了出来 那么我们可以尝试闭合一下看是否存在报错注入 可以看到是报错了&#xff0c;但是当我们想要尝试进行联合查…

浅谈集群的分类

本文主要介绍集群部署相关的知识&#xff0c;介绍集群部署的基础&#xff0c;集群的分类、集群的负载均衡技术&#xff0c;集群的可用性以及集群的容错机制。随后介绍Redis-Cluster以及Mysql的架构以及主从复制原理。 集群介绍 单台服务器本身会受到带宽、内存、处理器等多方面…

PostgreSQL教程(二):pg安装、架构基础、创建并访问数据库

安装 自然&#xff0c;在你能开始使用PostgreSQL之前&#xff0c; 你必须安装它。PostgreSQL很有可能已经安装到你的节点上了&#xff0c; 因为它可能包含在你的操作系统的发布里&#xff0c; 或者是系统管理员已经安装了它。如果是这样的话&#xff0c; 那么你应该从操作系统…

初识表及什么是数据表

一、了解表 1.1.概述 表是处理数据和建立关系型数据库及应用程序的基本单元&#xff0c;是构成数据库的基本元素之一&#xff0c;是数据库中数据组织并储存的单元&#xff0c;所有的数据都能以表格的形式组织&#xff0c;目的是可读性强。 1.2.表结构简述 一个表中包括行和列…

SolidWorks的stl零件导入simulink后仿真尺寸变大

没改单位&#xff0c;in不是导入&#xff0c;是英尺的意思