写点什么

软件测试 / 测试开发丨 Selenium 网页 frame 与多窗口处理

作者:测试人
  • 2023-09-01
    北京
  • 本文字数:1608 字

    阅读完需:约 5 分钟

免费领取:测试资料+测试用例+简历模板+测试文档

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:https://ceshiren.com/t/topic/27048

一、多窗口处理.

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 等方式定位到 frameframe、iframe 相当于 selenium 而言,则需要进行一些特殊的操作后,才能到定位到元素

2.2、多 frame 切换

  • frame 存在两种一种嵌套的一种未嵌套的

  • 切换 framedriver.swich_to.frame():根据元素 id、index 切换 framedriver.switch_to.default_content():切换到默认的 framedeiver.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()
复制代码


发布于: 刚刚阅读数: 5
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Selenium 网页frame与多窗口处理_Python_测试人_InfoQ写作社区