UI自动化Selenium iframe切换多层嵌套

IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。

简单来说,就像房子内的一个个房间一样;你要去房间里拿东西,就得先开门;

如上图就是一个很典型的iframe嵌套形式;要操作每一个元素,必须先进iframe;

Selenium自动化对iframe的操作无非就是:进入iframe和退出iframe;

1、Iframe进入方式:

  • 通过ID方式进入:driver.switch_to.frame('id值')
  • 通过Name方式进入:driver.switch_to.frame('name值')
  • 通过Xpath方式进入:如果没有id或name能定位,那就需要使用xpath
# 先获得iframe对象
iframe1 = driver.find_element_by_xpath("//div[@class='loginUrs']/iframe")
# 再切换进iframe
driver.switch_to.frame(iframe1)

2、Iframe退出:

  • 退出到上一层:driver.switch_to.parent_frame()
  • 退出到最外层:driver.switch_to.default_content()

3、示例:

  • 需要操作元素A:

先进入IframeBig,再进入Iframe2,然后操作元素A

driver.switch_to.frame(IframeBig)
driver.switch_to.frame(Iframe2)
driver.find_element_by_xpath("元素A的ID").click()
    • 需要先操作元素A,再操作元素B,然后操作元素C

先进入IframeBig,再进入Iframe2,操作A,退出Iframe2,进入Iframe3,操作元素B,退出Iframe2,操作元素C

# ----------先进入IframeBig,再进入Iframe2,操作A
driver.switch_to.frame(IframeBig)
driver.switch_to.frame(Iframe2)
driver.find_element_by_xpath("元素A的ID").click()
# ----------退出Iframe2,进入Iframe3,操作元素B
driver.switch_to.parent_frame()  #此时位于IframeBig内
driver.switch_to.frame(Iframe3)
driver.find_element_by_xpath("元素B的ID").click()
# ----------退出Iframe2,操作元素C
driver.switch_to.default_content() #此时位于最外层,不是IframeBig内
driver.switch_to.frame(IframeBig)
driver.find_element_by_xpath("元素C的ID").click()

综上所述,iframe多层嵌套时,一定要注意当前位于什么位置,否则就会迷失;

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

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

相关文章

出现 No such instance field: ‘XXXX‘ 的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 作为一个全栈的开发玩家,需要调试前后端的数据传输,方便发现问题所在! 在debug整个项目的时候,检查传输数据的时候,发现前端可以传输,但是后端一直拿不到 出现如下问题:No such instance field: parentModel 截图…

UI5与后端的文件交互(四)

文章目录 前言一、后端开发1. 新建管理模板表格2. 新建Function,动态创建文档 二、修改UI5项目1.Table里添加下载证明列2. 实现onClickDown事件 三、测试四、附 前言 这系列文章详细记录在Fiori应用中如何在前端和后端之间使用文件进行交互。 这篇的主要内容有&…

Leetcode的AC指南 —— 字符串/卡码网:55. 右旋字符串

摘要: Leetcode的AC指南 —— 字符串/卡码网:55. 右旋字符串。题目介绍:字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字…

灸哥问答:数据结构对软件开发的作用

在软件开发的浩瀚海洋中,数据结构如同一座坚固的灯塔,为开发者指明方向,确保他们在构建复杂系统时不会迷失。数据结构不仅仅是编程的基础,更是高效、稳定、可扩展软件的核心。 一、提升算法效率 数据结构与算法紧密相连&#xf…

antd——a-date-picker——日期的限制功能——js基础积累

antd——a-date-picker——日期的限制功能——js基础积累 禁用日期一、限制只能选明天及之后的日期(今天不可选中)二、限制只能选今天及之后的日期(今天可选中)三、限制只能选昨天及之前的日期(今天不可选中&#xff0…

Java业务功能并发问题处理

业务场景: 笔者负责的功能需要调用其他系统的进行审批,而接口的调用过程耗时有点长(可能长达10秒),一个订单能被多个人提交审批,当订单已提交后会更改为审批中,不能再次审批(下游系…

05-微服务-RabbitMQ-概述

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…

canvas设置文字阴影

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

MySQL之CRUD、常见函数及union查询

目录 一. CRUD 1.1 什么是crud 1.2 SELECT(查询) 1.3 INSERT(新增) 1.4 UPDATE(修改) 1.5 DELETE(删除) 二. 函数 2.1 常见函数 2.2 流程控制函数 2.3 聚合函数 三. union与union all 3.1 union 3.2 union all 3.3 具体不同 3.4 结论 四. 思维导图 一. CRUD 1.1 什么是crud…

【愚公系列】2023年12月 HarmonyOS应用开发者高级认证(完美答案)

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主&#xf…

6. Mybatis 缓存

6. Mybatis 缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率MyBatis系统中默认定义了两级缓存 一级缓存二级缓存 默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存&…

Transforer逐模块讲解

本文将按照transformer的结构图依次对各个模块进行讲解: 可以看一下模型的大致结构:主要有encode和decode两大部分组成,数据经过词embedding以及位置embedding得到encode的时输入数据 输入部分 embedding就是从原始数据中提取出单词或位置&…

ubuntu22.04配置双网卡绑定提升带宽

这里写自定义目录标题 Bonding简介配置验证参考链接 Bonding简介 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载均衡等功能,有很…

2023年工作初体验

23年终于正式入职,参与了正式上线的电商平台、crm平台等项目的研发,公司规模较小,气氛融洽,没有任何勾心斗角、末位淘汰,几乎没什么压力。虽然是我的第一家公司,但实际是个适合养老的公司(笑 总…

双击shutdown.bat关闭Tomcat报错:未设置关闭端口~

你们好,我是金金金。 场景 当我startup.bat启动tomcat之后,然后双击shutdown.bat关闭,结果报错了~ 排查 看报错信息很明显了,未配置关闭端口,突然想起来了我在安装的时候都选的是默认的配置,我还记得有这…

快速批量运行命令

Ansible 是 redhat 提供的自动化运维工具,它是 Python编写,可以通过 pip 安装。 pip install ansible 它通过任务(task)、角色(role)、剧本(playbook) 组织工作项目,适用于批量化系统配置、软件部署等需要复杂操作的工作。 但对于批量运行命…

宝塔部署nuxt3项目问题解决

使用宝塔部署nuxt3项目一直没成功,网站502,要不就是资源加载不出来 测试使用宝塔版本8.0.4 添加node项目方式失败,项目更目录设置到server,无法设置运行目录为public, 导致网站资源加载不出来,设置到.output目录,会提…

继电器组开发控制

也是通过树莓派IO口的控制来实现继电器组的开发 继电器组有四根信号线,2根电源线。 通过gpio readall 查看树莓派各个端口的信息选择26 27 28 29 作为信号端口 编程可能会遇到的一些问题 1、通过键盘输入指令的时候,如果用scanf 会有bug,导…

JavaScript高级程序设计读书记录(一):语言基础,语法,变量,数据类型

1. 语法 很大程度上借鉴了 C 语言和其他类 C 语言,如 Java 和 Perl. 1.1 区分大小写 1.2 标识符 第一个字符必须是一个字母、下划线(_)或美元符号($); 剩下的其他字符可以是字母、下划线、美元符号或数…

排除启动类故障----三大实验

目录 一、模拟破坏mbr和分区表然后修复 二、修复grub引导故障 三、遗忘root用户密码 一、模拟破坏mbr和分区表然后修复 1、mbr处于第一块磁盘的第一个物理扇区,总共512个字节,前446个字节是grub程序,后面64个字节是分区表 2、故障原因&a…