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

【UI自动化测试】10_web自动化测试 _frame切换、多窗口切换

文章目录

  • 一、frame切换
    • 1.1 frame
    • 1.2 frame方法
    • 1.3 frame切换-案例
  • 二、多窗口切换
    • 2.1 多窗口切换-方法
    • 2.2 多窗口切换-案例
      • 2.2.1 案例1
      • 2.2.2 多窗口工具封装
  • 三、小结

一、frame切换

  • 当前窗口中的元素如果在iframe标签的子网页中,不能直接进行元素定位,需要先进行frame切换才能进行定位和操作。
  • 如何分析所定位的元素是否在iframe标签中:
经验:当定位元素时,界面所看到样式如果是一块独立的区域,而且该区域和周围的样式完全不一样,就可以适当留意是否在一个iframe标签中。 提示:常用的frame表单有两种:frameset形式、iframe标签形式

1.1 frame

frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素。 形式一: [了解]<framesetcols="25%,75%"><framesrc="frame_a.htm"><framesrc="frame_b.htm"></frameset>形式二:<iframename="iframe_a"src="demo_iframe.htm"width="200"height="200"></iframe>

1.2 frame方法

# 说明: 在Selenium中封装了如何切换frame框架的方法# 步骤:1、切换到iframe driver.switch_to.frame(frame_reference)-->切换到指定frame的方法2、操作元素3、回到默认页面 driver.switch_to.default_content()-->恢复默认页面方法 注:-frame_reference:可以为frame框架的name、id或者定位到的frame元素-在frame中操作其他页面,必须先回到默认页面,才能进一步操作

1.3 frame切换-案例

# 导包fromseleniumimportwebdriverfromtimeimportsleepfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.selectimportSelect# 获取浏览器驱动对象driver=webdriver.Chrome()# 最大化浏览器driver.maximize_window()# 隐式等待# driver.implicitly_wait(30)# 打开urlurl=r"D:\web自动化素材\课堂素材\注册实例.html"driver.get(url)""" 需求: 1. 打开注册实例.html 2. 填写注册A 页面信息 3. 填写注册B 页面信息 """# 获取注册A iframe元素A=driver.find_element(By.CSS_SELECTOR,"#idframe1")# 1、切换到Adriver.switch_to.frame(A)# 2、注册A操作driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")# 3、回到默认目录 注册时例.htmldriver.switch_to.default_content()# 4、获取注册B iframe元素B=driver.find_element(By.CSS_SELECTOR,"#idframe2")# 5、切换到Bdriver.switch_to.frame(B)# 6、注册B操作driver.find_element(By.CSS_SELECTOR,"#userB").send_keys("admin")# 关闭浏览器sleep(3)driver.quit()

二、多窗口切换

多窗口:在HTML页面中, 当点击超链接或者按钮时, 有的会在新的窗口打开页面。

为什么要切换窗口? - 页面存在多个窗口式,selenium默认焦点只会在主窗口上所有的元素,不切换窗口,无法操作除主窗口以外的窗口内元素

2.1 多窗口切换-方法

  • 窗口切换:selenium需要通过窗口的句柄来实现窗口的切换!
  • 句柄: 英文handle, 窗口的唯一识别码
步骤:1)handles=driver.window_handles-->获取所有窗口句柄2)driver.switch_to.window(handles[n])-->切换指定句柄窗口3)driver.current_window_handle-->获取当前窗口句柄-selenium只能定位当前窗口中的元素,要定位新的窗口的元素就必须进行窗口切换!

2.2 多窗口切换-案例

2.2.1 案例1

fromtimeimportsleepfromseleniumimportwebdriver# 1、获取浏览器fromselenium.webdriver.common.byimportByfromselenium.webdriver.support.selectimportSelect driver=webdriver.Chrome()driver.implicitly_wait(10)# 2、打开urldriver.get("file:///Users/lgy/Documents/fodder/web/Register.html")""" 为什么要处理多窗口?-- selenium默认焦点在启动窗口,要操作其他窗口必须处理。 需求: 1、打开注册示例页面 2、点击注册A网页链接 3、填写注册A网页内容 """print("操作之前所有窗口的句柄:",driver.window_handles)driver.find_element(By.LINK_TEXT,"注册A网页").click()# 获取所有窗口句柄handles=driver.window_handlesprint("操作之后所有窗口的句柄:",handles)# 重点:切换窗口driver.switch_to.window(handles[1])# 填写注册A网页 用户名driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")# 4、关闭浏览器sleep(3)driver.quit()

2.2.2 多窗口工具封装

fromtimeimportsleepfromseleniumimportwebdriver# 1、获取浏览器fromselenium.webdriver.common.byimportByfromselenium.webdriver.support.selectimportSelect driver=webdriver.Chrome()driver.implicitly_wait(10)# 2、打开urldriver.get("file:///Users/lgy/Documents/fodder/web/Register.html")""" 需求: 如何随心所欲切换窗口? 思路: 1、获取所有窗口句柄 2、切换窗口 3、获取当前所在窗口title 4、判断title是否为需要的窗口 5、执行代码 需求: 1、打开注册示例页面 2、点击 注册A网页 注册B网页 3、在A网页和B网页中输入 对用户名输入 admin """defswitch_window(title):# 1、获取所有窗口句柄handels=driver.window_handles# 2、遍历句柄进行切换forhandelinhandels:# 操作driver.switch_to.window(handel)# 获取当前窗口title 并且 判断是否自己需要的窗口ifdriver.title==title:# 操作代码return"已找到{}窗口,并且已切换成功".format(title)title_A="注册A"title_B="注册B"# 打开注册A和注册B网页driver.find_element(By.LINK_TEXT,"注册A网页").click()driver.find_element(By.LINK_TEXT,"注册B网页").click()# 填写注册A网页 用户名print(switch_window(title_A))driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")print(switch_window(title_B))driver.find_element(By.CSS_SELECTOR,"#userB").send_keys("admin")# 4、关闭浏览器sleep(3)driver.quit()

三、小结

面试题:如果定位不到元素怎么办?

http://www.jsqmd.com/news/395096/

相关文章:

  • CrossOver 26重磅升级,跟我抢先体验CrossOver 26新特性吧 - 雨林谷
  • 2026 年春节档电影推荐:口碑必看《惊蛰无声》,全家 / 爸妈 / 朋友全场景观影指南 - SFMEDIA
  • [算法]dp优化
  • 并查集 - # [POJ 1182] 食物链
  • 五大靠谱AI论文生成网站对比,助你快速完成毕业论文写作
  • 困扰于AI论文工具选择?这份专业评分的TOP5榜单可参考
  • 毕业论文用AI写作工具?这5个经过验证的网站排名最实用
  • 完整教程:【AI】AI学习笔记:翻译:langGraph 持久化执行 以及文档部分理解
  • 洛谷 P3378:[模板] 堆 ← 二叉堆
  • 论文写作AI工具如何挑?这份实测过的五大网站排名请收下
  • LabVIEW列车轴承声学成像应用
  • 高效完成论文的AI工具怎么选?精选五大优质平台排名解析
  • 基于时频自适应掩膜和形态学优化的地震数据降噪方法(MATLAB)
  • 五大优质AI论文写作网站推荐,解决你的毕业论文创作难题
  • 开源版 EMQX(集群版)搭建
  • 选AI写论文工具不用愁,权威测评的5个网站排名已整理好
  • 还在纠结论文AI写作工具?这5个高口碑网站排名帮你高效决策
  • 揭秘!提示工程架构师跨界整合案例背后的故事
  • 毕业论文AI写作工具怎么选?这份五大可靠平台排名值得收藏
  • AI原生应用架构设计:如何选择最适合的API编排方案
  • BISHI63 计算阶乘
  • AI原生应用中微服务集成的日志管理与分析方法
  • Tauri 开发环境 Prerequisites 桌面 + 移动端)
  • 毕业论文AI辅助写作选哪个?盘点用户推荐的5个实用平台
  • Atcoder 90 问记录
  • wps/word单倍行距加入公式空白间隙仍然很大?
  • AI Agent技术栈:10个构建生产级Agent的核心概念
  • Shell脚本以及Shell脚本的基础语法就是什么
  • 详细介绍:[特殊字符]BZOJ 离线刷题神级工具!免联网 + 浏览器即开 + 题解代码全,效率直接翻倍!
  • Vue.js 循环语句