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

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

如frame操作。

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

1、直接定位frame内元素

如下以163邮箱为例

复制代码
driver =self.driver

driver.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.driver

driver.get("https://mail.163.com/")

driver.maximize_window()

#切换frame,对应iframe没有固定id

driver.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没有固定id

driver.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内需要切换即可。

每天进步一点点,加油!

相关推荐
SL_staff12 分钟前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
Shaoshing24 分钟前
前缀和与差分
java·数据结构·算法·前缀和·差分
dd聊技术42 分钟前
Prompt 从代码常量搬进数据库:改一句话,不用再发一次版
java·后端
ly76891 小时前
Spring Data MongoDB 批量写入实践:BulkOperations 批大小与写关注权衡
java·mongodb·spring·批量写入·bulkoperations·写关注·mongotemplate
TAKETODAY1 小时前
Netty 是怎么把 HTTP 请求交给 MVC 的?一个请求的完整链路
java·netty
蚰蜒螟1 小时前
从内核启动到 Java NIO:一次 socket accept 的源码串联之旅
java·python·nio
会编程的吕洞宾1 小时前
Spring AI 2.0 自校正结构化输出实战:让大模型稳定吐出合格 JSON
java·人工智能·后端·spring
bmxy小明同学1 小时前
2026-10-09-token与成本
java·前端·数据库
高洁012 小时前
AI赋能产业升级与中美未来经济赛道博弈
人工智能·python·深度学习·机器学习·transformer
夜晚回家2 小时前
Python 原始字符串详解 | r 前缀到底让什么不再转义
开发语言·python