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

目录

一、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.mzph.cn/news/697176.shtml

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

相关文章

MyBatis Plus中的动态表名实践

随着数据库应用的不断发展&#xff0c;面对复杂多变的业务需求&#xff0c;动态表名的处理变得愈发重要。在 MyBatis Plus&#xff08;以下简称 MP&#xff09;这一优秀的基于 MyBatis 的增强工具的支持下&#xff0c;我们可以更便捷地应对动态表名的挑战。本文将深入研究如何在…

美创新一代数据安全管理平台宣传片「龍」重登场

美创新一代数据安全管理平台&#xff08;DSM Cloud&#xff09;产品宣传片 国产化、混合多云环境催生愈加复杂的数据安全防护、管理及可持续运营挑战。 美创新一代数据安全管理平台&#xff08;DSM Cloud&#xff09;&#xff0c;围绕韧性数据安全体系&#xff0c;聚焦全域数据…

[HTML]Web前端开发技术27(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

activeMq将mqtt发布订阅转成消息队列

1、activemq.xml置文件新增如下内容 2、mqttx测试发送&#xff1a; 主题&#xff08;配置的模糊匹配&#xff0c;为了并发&#xff09;&#xff1a;VirtualTopic/device/sendData/12312 3、mqtt接收的结果 4、程序处理 package comimport cn.hutool.core.date.DateUtil; imp…

ReactNative进阶(二十三)error: no type or protocol named ‘RCTBridgeModule’问题修复

文章目录 一、前言三、拓展阅读 一、前言 Jenkins组包RN技术栈实现的iOS应用时&#xff0c;遇到以下错误提示信息&#xff1a; error: no type or protocol named ‘RCTBridgeModule’ interface RCTEventDispatcher : NSObject <RCTBridgeModule>error: cannot find i…

【AIGC】基于深度学习的图像生成与增强技术

摘要&#xff1a; 本论文探讨基于深度学习的图像生成与增强技术在图像处理和计算机视觉领域的应用。我们综合分析了主流的深度学习模型&#xff0c;特别是生成对抗网络&#xff08;GAN&#xff09;和变分自编码器&#xff08;VAE&#xff09;等&#xff0c;并就它们在实际应用中…

嵌入式linux开发 (三十四) 内存管理2.0(6) 各种段(.code .rodata .data .bss .stack .heap)的含义

我们知道, 逻辑程序在连接的时候在elf 文件中会有 .code .rodata .data 然后在内存中才会有 .code .rodata .data那么为什么链接器在链接生成的elf文件中会有这些段呢?这涉及到链接器的历史问题

小程序性能优化

背景 在开发小程序的过程中我们发现&#xff0c;小程序的经常会遇到性能问题&#xff0c;尤其是在微信开发者工具的时候更是格外的卡&#xff0c;经过排查发现&#xff0c;卡顿的页面有这么多的js代码需要加载&#xff0c;而且都是在进入这个页面的时候加载&#xff0c;这就会…

Java架构师之路九、设计模式:常见的设计模式,如单例模式、工厂模式、策略模式、桥接模式等

目录 常见的设计模式&#xff1a; 单例模式&#xff1a; 工厂模式&#xff1a; 策略模式&#xff1a; 桥接模式&#xff1a; 责任链模式&#xff1a; Java架构师之路八、安全技术&#xff1a;Web安全、网络安全、系统安全、数据安全等-CSDN博客Java架构师之路十、框架和工…

Android 仿信号格子强度动画效果实现

效果图 在 Android 中&#xff0c;如果你想要绘制一个圆角矩形并使其居中显示&#xff0c;你可以使用 Canvas 类 drawRoundRect 方法。要使圆角矩形居中&#xff0c;你需要计算矩形的位置&#xff0c;这通常涉及到确定矩形左上角的位置&#xff08;x, y&#xff09;&#xff0…

Leetcode 第 384 场周赛题解

Leetcode 第 384 场周赛题解 Leetcode 第 384 场周赛题解题目1&#xff1a;3033. 修改矩阵思路代码复杂度分析 题目2&#xff1a;3034. 匹配模式数组的子数组数目 I思路代码复杂度分析 题目3&#xff1a;3035. 回文字符串的最大数量思路代码复杂度分析 题目4&#xff1a;3036. …

C语言标准库介绍:<string.h>

在C语言中&#xff0c;<string.h>头文件是标准库中的一个重要部分&#xff0c;它定义了一系列操作字符串和字符数组的函数。本文将详细介绍<string.h>头文件中包含的22个函数&#xff0c;并提供每个函数的完整示例代码。 简介 <string.h>头文件定义了一个变…

设计模式-工厂模式(Factory Pattern)

一、工厂模式说明 工厂模式是一种创建型设计模式&#xff0c;它提供了一种将对象的创建与使用分离的方式。工厂模式通过引入一个公共的接口来创建对象&#xff0c;而不是通过直接调用构造函数来创建对象。这样做的好处是使得代码更加灵活&#xff0c;更容易维护和扩展。 工厂模…

第3部分 原理篇2去中心化数字身份标识符(DID)(2)

3.2.2. DID相关概念 3.2.2.1. 去中心化标识符 (Decentralized identifier&#xff0c;DID) 本聪老师&#xff1a;DID有两个含义&#xff0c;一是Decentralized identity&#xff0c;就是去中心化身份&#xff0c;是广泛意义的DID。另外一个是Decentralized identifier&#xf…

Web性能优化-浏览器工作原理-MDN文档学习笔记

浏览器工作原理 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever MDN中文官网 导航 导航是加载 web 页面的第一步&#xff1a;输入 URL、点击一个链接、提交表单等等 DNS查询 导航的第一步是要去寻找页面资源的位置 例如访问https://example.com&#x…

如何解决DNS解析错误故障

DNS解析错误会导致将一个域名解析为错误的IP地址&#xff0c;或者根本无法确定某个域名对应的IP地址&#xff0c;从而无法通过域名访问相应的站点&#xff0c;形成DNS解析故障。最常见的症状是访问站点对应的IP地址没有问题&#xff0c;但访问其域名时却出现错误。 DNS解析异常…

qt-动画圆圈等待-LED数字

qt-动画圆圈等待-LED数字 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "LedNumber.h" #include <QLabel>LEDNumber::LEDNumber(QWidget *parent) : QWidget(parent) {//设置默认宽高比setScale((float)0.6);//设置默认背景色se…

【深入了解TensorFlow】TensorFlow的安装与配置

【深入了解TensorFlow】TensorFlow的安装与配置 TensorFlow的安装与配置准备就绪:开始前的准备工作1. 确定您的硬件和操作系统2. 选择安装方式3. 创建虚拟环境(可选)安装TensorFlow使用pip安装使用conda安装从源代码编译安装配置TensorFlow导入TensorFlow模块检查安装是否成…

Oracle 表被删除或重命名后账户间的授权与同义词关系

Oracle 表被删除或重命名后账户间的授权与同义词关系 情景一、 当数据表删除后 数据表被删除后&#xff0c;同义词还是存在的&#xff0c;可以查看当前用户下查看同义词&#xff1a; -- 查看当前用户下的同义词 select * from user_synonyms但授权关系不在了&#xff0c;若重…

10 个 Linux 中超方便的 Bash 别名

1、 你有几次遇到需要解压 .tar 文件但无法记住所需的确切参数&#xff1f;别名可以帮助你&#xff01;只需将以下内容添加到 .bash_profile 中&#xff0c;然后使用 untar FileName 解压缩任何 .tar 文件。 alias untartar -zxvf 2、 下载文件时&#xff0c;如果出现问题想要…