当前位置: 首页 > news >正文

Selenium + Python 自动化测试06(frame操作方法)

        上一篇我们讲述了特殊元素的操作方法,本篇接着讲一些可能遇到的其它操作方法。

如frame操作。

Frame 标签有Frameset、Frame、Iframe 3种,Frameset可以直接照常进行元素定位。Frame、Iframe需要驱动切换到对应的frame才可以定位到。否则 ,会报错。

1、直接定位frame内元素

如下以163邮箱为例

driver = self.driverdriver.get("https://mail.163.com/")driver.maximize_window()#定位用户名输入框driver.find_element_by_xpath("//*[@class='j-inputtext dlemail j-nameforslide']").send_keys("zhwzh0311")time.sleep(3)

这样执行报错:定位不到元素

2、驱动跳转到对应frame

frame 默认使用id、name定位的,看下面iframe 没有固定id,

这个可以使用8大定位方法,tagname定位

<iframe name="" frameborder="0" id="x-URS-iframe1722999269216.9436" scrolling="no" style="width: 100%; height: 100%; border: none; background: none;" src="https://dl.reg.163.com/webzj/v1.0.1/pub/index_dl2_new.html?cd=%2F%2Fmimg.127.net%2Fp%2Ffreemail%2Findex%2Funified%2Fstatic%2F2024%2F%2Fcss%2F&amp;cf=urs.163.918051fb.css&amp;MGID=1722999269216.9436&amp;wdaId=&amp;pkid=CvViHzl&amp;product=mail163"></iframe>

增加跳转,就可以解决上面报错的问题:

#切换frame,对应iframe没有固定id
driver.switch_to.frame(driver.find_element('tag name', 'iframe'))
 

driver = self.driverdriver.get("https://mail.163.com/")driver.maximize_window()#切换frame,对应iframe没有固定iddriver.switch_to.frame(driver.find_element('tag name', 'iframe'))#定位用户名输入框driver.find_element_by_xpath("//*[@class='j-inputtext dlemail j-nameforslide']").send_keys("zhwzh0311")time.sleep(3)

上面的代码驱动已经切换到frame内部,返回的话用:

driver. switch_to.default_content()

如下面代码,返回驱动后就定位 不到了。如下图所示。

#切换frame,对应iframe没有固定iddriver.switch_to.frame(driver.find_element('tag name','iframe'))#定位用户名输入框driver.find_element_by_xpath("//*[@class='j-inputtext dlemail j-nameforslide']").send_keys("zhwzh0311")time.sleep(3)driver.switch_to.default_content()driver.find_element_by_xpath("//*[@class='j-inputtext dlemail j-nameforslide']").send_keys("zhwzh0311")

        以上就是frame内元素定位方法。当我们看到定位失败的情况下,可以考虑是不是元素在frame内需要切换即可。

        每天进步一点点,加油!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【vulnhub】Wakanda :1靶机
  • 《向量数据库指南》——开源社区与商业化的平衡
  • 茶余饭后(六)
  • [AI Embedchain] 开始使用 - 全栈
  • Vue 2 TodoList 案例
  • 博弈dp,CF 731E - Funny Game
  • Linux安全与高级应用(三)深入探索MySQL数据库:安装、管理与安全实践
  • 在MySQL中,处理层次结构数据(如树状或组织结构图)的查询
  • 国家网络安全战略
  • 新160个crackme - 027-MexeliteCRK1
  • 深度学习:记一次由model.train() 引发的模型训练效果变差事故
  • 纯手工在内网部署一个Docker私有仓库
  • 【RISC-V设计-09】- RISC-V处理器设计K0A之CIC
  • android10 系统定制:增加应用锁功能
  • DS1302实时时钟(51单片机)
  • C# 免费离线人脸识别 2.0 Demo
  • JavaScript设计模式与开发实践系列之策略模式
  • Java编程基础24——递归练习
  • MySQL的数据类型
  • Protobuf3语言指南
  • PV统计优化设计
  • Python连接Oracle
  • 从0实现一个tiny react(三)生命周期
  • 好的网址,关于.net 4.0 ,vs 2010
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 聊一聊前端的监控
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 人脸识别最新开发经验demo
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我从编程教室毕业
  • 学习ES6 变量的解构赋值
  • mysql面试题分组并合并列
  • 阿里云重庆大学大数据训练营落地分享
  • ## 1.3.Git命令
  • #define,static,const,三种常量的区别
  • #Z0458. 树的中心2
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #控制台大学课堂点名问题_课堂随机点名
  • (145)光线追踪距离场柔和阴影
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (javaweb)Http协议
  • (二)测试工具
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)UDP基本编程步骤
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • ***通过什么方式***网吧
  • .NET 8 跨平台高性能边缘采集网关
  • .NET NPOI导出Excel详解