• Selenium —— 网页frame与多窗口处理!


    一、多窗口处理.

    1.1、多窗口简介

    点击某些链接,会重新打开⼀个窗⼜,对于这种情况,想在新页⾯上操作,就
    得先切换窗⼜了。
    获取窗⼜的唯⼀标识⽤句柄表⽰,所以只需要切换句柄,就可以在多个页⾯灵
    活操作了

    1.2、多窗口处理流程

    • 先获取当前窗口的句柄driver.current_window_handle
    • 再获取所有的窗口句柄driver.windows_handles
    • 然后判断当前窗口是否为需要操作的窗口,如果不是则,切换到下一个窗口,如果是,则在当前窗口进行操作
    1. def test_switch_window(self):
    2. """窗口切换操作"""
    3. # 1、打开百度
    4. self.driver.get("https://www.baidu.com")
    5. print(self.driver.title, self.driver.current_window_handle)
    6. # 2、打开搜狗
    7. self.driver.switch_to.new_window()
    8. self.driver.get("https://www.sougou.com")
    9. print(self.driver.title, self.driver.current_window_handle)
    10. # 3、打开hao360
    11. self.driver.switch_to.new_window()
    12. self.driver.get("https://hao.360.com/")
    13. print(self.driver.title, self.driver.current_window_handle)
    14. # 4、打开测试人
    15. self.driver.switch_to.new_window()
    16. self.driver.get("https://ceshiren.com")
    17. print(self.driver.title, self.driver.current_window_handle)
    18. handles = self.driver.window_handles
    19. print(handles)
    20. self.driver.switch_to.window(handles[0])
    21. self.driver.switch_to.window(handles[-1])
    22. 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(“子节点”)
    1. def test_switch_frame(self):
    2. # ❖ 打开包含frame的web页⾯ https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
    3. # ❖ 打印’请拖拽我’元素的⽂本
    4. # ❖ 打印’点击运⾏’元素的⽂
    5. self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
    6. self.driver.switch_to.frame("iframeResult")
    7. ele01 = self.driver.find_element(By.ID, "draggable")
    8. print(ele01.text)
    9. ele02 = self.driver.find_element(By.ID, "droppable")
    10. print(ele02.text)
    11. self.action.drag_and_drop(ele01, ele02).perform()
    12. time.sleep(3)
    13. self.driver.switch_to.alert.accept()
    14. # self.driver.switch_to.default()
    15. # self.driver.switch_to.parent_frame()

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

    软件测试面试文档

    我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
     

    在这里插入图片描述

  • 相关阅读:
    基于HTML+CSS+JavaScript制作学生网页——外卖服务平台10页带js 带购物车
    Web网页实现多路播放RTSP视频流(使用WebRTC)
    MSDC 4.3 接口规范(18)
    金仓数据库 KingbaseES 插件DBMS_UTILITY
    docker-compose 启动多个容器 为容器设置自定义网络 互相ping
    删除的数据如何恢复?误删了文件怎么恢复
    【鸿蒙应用开发系列】- 打开页面与页面间数据交互
    内核不中断前提下,Gaussdb(DWS)内存报错排查方法
    java毕业设计成品源码网站ssm水果商城系统电商购物项目
    2024现代Android开发趋势
  • 原文地址:https://blog.csdn.net/IT_LanTian/article/details/133323596