Selenium:网页frame与多窗口处理

🍅 **点击文末小卡片,**免费获取软件测试全套资料,资料在手,涨薪更快

一、多窗口处理

1.1、多窗口简介

点击某些链接,会重新打开⼀个窗⼜,对于这种情况,想在新页⾯上操作,就

得先切换窗⼜了。

获取窗⼜的唯⼀标识⽤句柄表⽰,所以只需要切换句柄,就可以在多个页⾯灵

活操作了

1.2、多窗口处理流程

  • 先获取当前窗口的句柄driver.current_window_handle

  • 再获取所有的窗口句柄driver.windows_handles

  • 然后判断当前窗口是否为需要操作的窗口,如果不是则,切换到下一个窗口,如果是,则在当前窗口进行操作

    def test_switch_window(self):
    """窗口切换操作"""
    # 1、打开百度
    self.driver.get("https://www.baidu.com")
    print(self.driver.title, self.driver.current_window_handle)
    # 2、打开搜狗
    self.driver.switch_to.new_window()
    self.driver.get("https://www.sougou.com")
    print(self.driver.title, self.driver.current_window_handle)
    # 3、打开hao360
    self.driver.switch_to.new_window()
    self.driver.get("https://hao.360.com/")
    print(self.driver.title, self.driver.current_window_handle)
    # 4、打开测试人
    self.driver.switch_to.new_window()
    self.driver.get("https://ceshiren.com")
    print(self.driver.title, self.driver.current_window_handle)
    handles = self.driver.window_handles
    print(handles)
    self.driver.switch_to.window(handles[0])
    self.driver.switch_to.window(handles[-1])
    print(self.driver.title)

二、多网页frame处理

2.1、frame简介

在web自动化中,如果一个元素始终无法定位,那么很有可能是frame中

  • 什么是frame呢?

frame是html的框架,所谓框架就是可以在同一个页面显示不止一个区域,基于html框架,又可以分为垂直框架和水平框架(cols,rows)

  • frame分类
    • frame标签分为frameset,ifame、frame三种
    • frameset和普通的标签一样,不会影响正常的元素定位,可以使用index、id、name、webelement等方式定位到frame
    • frame、iframe相当于selenium而言,则需要进行一些特殊的操作后,才能到定位到元素

2.2、多frame切换

  • frame存在两种
    • 一种嵌套的
    • 一种未嵌套的
  • 切换frame
    • driver.swich_to.frame():根据元素id、index切换frame
    • driver.switch_to.default_content():切换到默认的frame
    • deiver.switch_to.parent_frame():切换到父级frame

未嵌套的frame

  • driver.switch_to.frame('frame的id'):有id时优先使用id
  • driver.switch_to.frame('frame-index'):没有id的时间根据索引来处理,索引从0开始

嵌套的frame

  • 对于嵌套的frame,则先进入到frame的父节点,再进到子节点,然后可以就可以子节点中的元素对象进行操作了

  • driver.switch_to.frame("父节点")

  • driver.switch_to.frame("子节点")

    def test_switch_frame(self):
    # ❖ 打开包含frame的web页⾯ https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
    # ❖ 打印'请拖拽我'元素的⽂本
    # ❖ 打印'点击运⾏'元素的⽂
    self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
    self.driver.switch_to.frame("iframeResult")
    ele01 = self.driver.find_element(By.ID, "draggable")
    print(ele01.text)
    ele02 = self.driver.find_element(By.ID, "droppable")
    print(ele02.text)
    self.action.drag_and_drop(ele01, ele02).perform()
    time.sleep(3)
    self.driver.switch_to.alert.accept()
    # self.driver.switch_to.default()
    # self.driver.switch_to.parent_frame()

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

相关推荐
会飞锦鲤9 分钟前
基于 Mask R-CNN 的药片缺陷检测系统
人工智能·pytorch·python·神经网络·resnet-50
默 语12 分钟前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
梧桐凰34 分钟前
AI 时代测试工程师的武器库:实战工具指南
人工智能·功能测试·测试用例
清水白石00844 分钟前
Python 异步编程深度解析:Cancellation 到底是异常还是控制信号?从 asyncio 取消机制到企业级事务设计最佳实践
开发语言·python
Patrick在香港1 小时前
Python 审计香港开放数据目录:两个端点差 10 倍,只有 9.3% 的资源标了「最后修改时间」
开发语言·数据库·python·数据分析·api·数据治理·开放数据
IT毕设梦工厂1 小时前
计算机毕业设计选题推荐:基于大数据的草鱼价格分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·python·数据挖掘·数据分析·课程设计·大数据毕设项目
颜挺锐1 小时前
如何轻松通过性能测试面试之第十一篇:如何判断应用的最大处理能力
面试·职场和发展
GISHUB1 小时前
基于QGIS 3.44开发Python插件完整教程
python·qgis
大数据魔法师1 小时前
curl_cffi从入门到实战
爬虫·python
Sylvia33.2 小时前
火星数据体育API|一站式接入足球篮球电竞等18+项目实时数据
java·开发语言·python·websocket·游戏