Cyan Blog Cyan Blog
首页
  • Java (opens new window)
  • JUC (opens new window)
  • JVM (opens new window)
  • Redis

    • Redis安装 (opens new window)
    • Redis基础 (opens new window)
    • Redis实战 (opens new window)
    • Redis集群安装 (opens new window)
    • Redis分布式缓存 (opens new window)
    • Redis多级缓存 (opens new window)
    • Redis原理 (opens new window)
  • 管理工具

    • Maven (opens new window)
    • Git (opens new window)
  • SSM

    • Spring (opens new window)
    • SpringBoot (opens new window)
    • Mybatis (opens new window)
    • MybatisPlus (opens new window)
  • 微服务

    • Docker (opens new window)
    • RabbitMQ (opens new window)
    • SpringCloud (opens new window)
    • Dubbo (opens new window)
    • MongoDB (opens new window)
    • Zookeeper (opens new window)
  • Java面试题 (opens new window)
  • JUC面试题 (opens new window)
  • JVM面试题 (opens new window)
  • Linux面试题 (opens new window)
  • SQL面试题 (opens new window)
  • Maven面试题 (opens new window)
  • Redis面试题 (opens new window)
  • SSM面试题 (opens new window)
  • SpringCloud面试题 (opens new window)
  • Linux (opens new window)
  • C++ (opens new window)
  • 数据库

    • MySQL (opens new window)
    • NoSQL (opens new window)
  • 软件测试

    • 软件测试 (opens new window)
  • 加密解密 (opens new window)
  • bilibili字幕提取 (opens new window)
  • 道理 (opens new window)
  • 关于博主

    • Github (opens new window)
    • CSDN (opens new window)
  • 关于本站

    • 如何搭建博客网站 (opens new window)
首页
  • Java (opens new window)
  • JUC (opens new window)
  • JVM (opens new window)
  • Redis

    • Redis安装 (opens new window)
    • Redis基础 (opens new window)
    • Redis实战 (opens new window)
    • Redis集群安装 (opens new window)
    • Redis分布式缓存 (opens new window)
    • Redis多级缓存 (opens new window)
    • Redis原理 (opens new window)
  • 管理工具

    • Maven (opens new window)
    • Git (opens new window)
  • SSM

    • Spring (opens new window)
    • SpringBoot (opens new window)
    • Mybatis (opens new window)
    • MybatisPlus (opens new window)
  • 微服务

    • Docker (opens new window)
    • RabbitMQ (opens new window)
    • SpringCloud (opens new window)
    • Dubbo (opens new window)
    • MongoDB (opens new window)
    • Zookeeper (opens new window)
  • Java面试题 (opens new window)
  • JUC面试题 (opens new window)
  • JVM面试题 (opens new window)
  • Linux面试题 (opens new window)
  • SQL面试题 (opens new window)
  • Maven面试题 (opens new window)
  • Redis面试题 (opens new window)
  • SSM面试题 (opens new window)
  • SpringCloud面试题 (opens new window)
  • Linux (opens new window)
  • C++ (opens new window)
  • 数据库

    • MySQL (opens new window)
    • NoSQL (opens new window)
  • 软件测试

    • 软件测试 (opens new window)
  • 加密解密 (opens new window)
  • bilibili字幕提取 (opens new window)
  • 道理 (opens new window)
  • 关于博主

    • Github (opens new window)
    • CSDN (opens new window)
  • 关于本站

    • 如何搭建博客网站 (opens new window)
  • 设计模式

  • 软件测试

  • 软件测试实验

    • 软件测试
    • WebDriver⭐⭐
    • 定位⭐⭐
    • 浏览器操作⭐
    • 元素基本操作⭐⭐
    • 模拟键鼠操作⭐⭐
    • 消息框操作⭐
    • 切换浏览器窗口⭐
    • SoftwareTest⭐
    • SoftwareTest
    • SoftwareTest
    • SoftwareTest
    • SoftwareTest
  • 计算机
  • 软件测试实验
2025-03-17
0
0
目录

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
切换浏览器窗口⭐
SoftwareTest

← 切换浏览器窗口⭐ SoftwareTest→

最近更新
01
项目优化
05-06
02
项目优化
05-06
03
延迟消息
05-05
更多文章>
Theme by Vdoing | Copyright © 2025-2025 Cyan Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式