SoftwareTest⭐
- 后台测试问题分析:
- HTML里是否有网页的嵌套(网页里是否存在frame或iframe标记的元素)
# Frame标记
- frame是HTML语法里的框架,你可以在同一个浏览器窗口中显示不止一个网页。
<frameset cols="25%,50%,25%">
<frame src="a.htm"></frame>
<frame src="b.htm"></frame>
<frame src="c.htm"></frame>
</frameset>
说明:
frameset告知HTML 文件是框架模式,并设定可视窗口怎么分割。不能嵌套在body下级,需要用它代替body写在html下级。(frame需要在frameset中,iframe可以在body中)
frame设定一个框架窗口里包含的页面源文件地址
HTML5不支持标签,HTML4支持标签
# Iframe标记
- iframe称为"内联框架”,写在body里,用于嵌入另一个网页。
<iframe src="a.htm"></iframe>
<iframe src="b.htm"></iframe>
<iframe src="c.htm"></iframe>
说明: Selenium自动化测试时,如果网页里目标元素位于frame或iframe内部的网页里,必须切换Frame,frameset不用做任何处理。
# 切换frame语法
- 不论HTML里标记是frame还是iframe,Selenium中切换Frame语法都是相同的。
- 切换Frame语法:
driver.switch_to.frame(标识信息)
- 标识信息可以支持:
- frame或iframe标记的id属性值(str类型)、name属性值(str类型)、或从0开始编号的索引号(int类型)
- frame或iframe标记的页面元素对象(webelement类型(用find_element返回的元素))。
- 切换回默认主网页
driver.switch_to.default_content()
- 问题1
- 抛出NoSuchFrameException
- 分析:没有找到要切换的目标Frame,是由于之前切换到子网页里造成的。
- 切换子网页后需要再切换到默认主网页后才能进入子网页
driver.switch_to.default_content()
- 问题2
- NoSuchElementException
- 分析:切换到新窗口之前,位于后台页里的上方子网页内,切换到新窗口,操作完毕后,关闭新窗口,切换回原后台窗口,无法再次定位上方子网页内的元素。
- 原因:切换完窗口之后,默认又回到主网页里。
- 解决方案:先切换到子网页里,再定位元素进行操作。
- driver..switch_to.window(…)
- driver.switch_to.frame(…)
- 问题3
- 抛出NoSuchWindowException
- 分析:点击“退出”之前,位于后台页里的上方子网页内,点击“退出”之后,跳转到登录页,登录页里没有frame,无法定位主网页内的元素。
- 原因:在子网页里操作之后,跳转到没有frame的网页,就算子网页消失也不会默认回到主网页里。
- 解决方案:先切换到默认主网页里,再定位元素进行操作。
- driver.switch_to.default_content()
driver.switch_to.frame("menu-frame")#切换frame
driver.find_element(By.LINK_TEXT,"商品回收站").click()
#抛出NoSuchFrameException,需要切换回默认主网页
driver.switch_to.default_content()#切换回默认主网页!!
driver.switch_to.frame("header-frame")#切换到子网页里
driver.find_element(By.LINK_TEXT,"开店向导").click()
#切换别的窗口后切换回来点击,抛出NoSuchElementException,会切换的默认主网页,需要再切换到子网页里
a=driver.current_window_handle
Lst1=driver.window_handles
driver.switch_to.window(lst1[-1])
driver.find_element(By.LINK_TEXT,"查看购物车").click()
driver.close()
driver.switch_to.window(a)
driver.switch_to.frame("header-frame")#切换到子网页里
driver.find_element(By.LINK_TEXT,"个人设置").click()
driver.find_element(By.LINK_TEXT,"")click()#切换到没有frame的网页中
#抛出NoSuchFrameException,需要切换回默认主网页
driver.switch_to.default_content()#切换回默认主网页
driver.find_element(By.NAME,"username").send_keys("admin")
# 总结
指令
- driver.switch_to.frame(标识信息)
- driver.switch_to.default_content()
切换到子网页后,需要切换回默认主网页后才能再切换到子网页(问题1)
切换窗口后,Selenium会自动切换到主网页(问题2)
页面跳转后,Selenium不会自动切换到主网页(问题3)
#
上次更新: 2025/5/2 14:40:28