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而言,则需要进行一些特殊的操作后,才能到定位到元素
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

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()

END今天的分享就到此结束了,对你有所帮助的话留下小心心哈! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/117530.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于EPICS stream模块的直流电源的IOC控制程序实例

本实例程序实现了对优利德UDP6720系列直流电源的网络控制和访问,先在此介绍这个项目中使用的硬件: 1、UDP6721直流电源:受控设备 2、moxa串口服务器5150:将UDP6721直流电源设备串口连接转成网络连接 3、香橙派Zero3:运…

【iOS】知乎日报前三周总结

这几天一直在进行知乎日报的仿写,仿写过程中积累了许多实用的开发经验,并对MVC有了更深的了解,特撰此篇作以总结 目录 第一周将网络请求封装在一个单例类Manager中SDWebImage库的简单使用运用时间戳处理当前时间自定义NavigationBar 第二周在…

HarmonyOS(二)—— 初识ArkTS开发语言(中)之ArkTS的由来和演进

前言 在上一篇文章HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门,我初识了TypeScript相关知识点,也知道ArkTS是华为基于TypeScript发展演化而来。 从最初的基础的逻辑交互能力,到…

VScode配置 github 上传代码

初始化,设置用户名和密码 # 设置你的 Git 用户名 git config --global user.name author# 设置你的 Git 邮箱 git config --global user.email authorgmail.com# 确保 Git 输出带有颜色 git config --global color.ui auto​# 查看 Git 配置 git list1. 初始化本地…

Java8实战-总结46

Java8实战-总结46 CompletableFuture:组合式异步编程让代码免受阻塞之苦使用 CompletableFuture 发起异步请求寻找更好的方案 CompletableFuture:组合式异步编程 让代码免受阻塞之苦 使用 CompletableFuture 发起异步请求 可以使用工厂方法supplyAsyn…

数据包端到端的流程

流程 A给F发送一个数据包的流程: 首先 A(192.168.0.1)通过子网掩码(255.255.255.0)计算出自己与 F(192.168.2.2)并不在同一个子网内,于是决定发送给默认网关(192.168.0.…

vue3项目实践

创建 vue3 项目 node本版:node 16.x.x, 脚手架:create-vue 脚手架工具,底层vite 创建vue3项目:npm init vuelatest setup函数 vue3 单文件组件 1、vite.config.js配置文件基于vite的配置 2、template模板不再要求唯…

4 函数的升级-下

重载(overload) 同一个标识符在不同的上下文有不同的意义 如汉语中“洗”和不同的字搭配后,有不同的含义,play 和不同的单词搭配后有不同的含义。 函数重载:用同一个函数名定义不同的函数,通过不同的参数搭…

c++11中的线程库和包装器

c11 1. 线程库1.1 线程库1.2 锁mutex 2. 包装器2.1 funciton2.2 bind 1. 线程库 1.1 线程库 C11中的线程库提供了一种方便的方式来创建和管理线程。其中,std::thread是一个重要的类,它允许我们创建新线程并控制它们的执行。以下是std::thread的一些重要…

048基于web+springboot的校园资料分享平台

欢迎大家关注,一起好好学习,天天向上 文章目录 一项目简介技术介绍 二、功能组成三、效果图四、 文章目录 一项目简介 本校园资料分享平台有管理员和用户两个角色。管理员功能有个人中心,学生管理,资料分享管理,资源分…

03、SpringBoot + 微信支付 ---- 创建订单、保存二维码url、显示订单列表

目录 Native 下单1、创建课程订单保存到数据库1-1:需求:1-2:代码:1-3:测试结果: 2、保存支付二维码的url2-1:需求:2-2:代码:2-3:测试:…

[python 刷题] 1248 Count Number of Nice Subarrays

[python 刷题] 1248 Count Number of Nice Subarrays 题目如下: Given an array of integers nums and an integer k. A continuous subarray is called nice if there are k odd numbers on it. Return the number of nice sub-arrays. 这道题和 1343 Number of S…

Python实验五 异常处理

实验 1:为下列代码添加异常处理。 xint(input(请输入一个整数)) print(100/x) # 实验 1:为下列代码添加异常处理。 try:xint(input(请输入一个整数:))print(100/x) except ValueError:print(请输入一个整数) except ZeroDivisionError:print…

Spring Boot中解决跨域问题(CORS)

1. 跨域介绍 首先解释什么是跨域,跨域就是前端和后端的端口号不同;会产生跨域问题,这里浏览器的保护机制(同源策略)。 同源策略:前端和后端的协议、域名、端口号三者都相同叫做同源。 我们看一下不同源&am…

项目部署文档

申请SSL证书 先申请,用免费的 下载证书 先将下载下来的保存起来 服务器安装JDK: 创建develop目录 mkdir /usr/local/develop/ 把JDK压缩包上传到/usr/local/develop/目录 解压安装包 并且将安装到指定目录 tar -zxvf /usr/local/develop/jdk-8u191-linux-x64.tar.gz -C /us…

嵌入式中如何将BootLoader与APP合并成一个固件

1、前言 嵌入式固件一般分为BootLoader和App,BootLoader用于启动校验、App升级、App版本回滚等功能,BootLoader在cpu上电第一阶段中运行,之后跳转至App地址执行应用程序。 因此,在发布固件的时候,会存在BootLoader固件…

IOS手机耗电量测试

1. 耗电量原始测试方法 1.1 方法原理: 根据iPhone手机右上角的电池百分比变化来计算耗电量。 1.2实际操作: 在iOS通用设置中打开电池百分比数值显示,然后操作30分钟,60分钟,90分钟,看开始时和结束时电池…

【WSL/WSL 2-Redis】解决Windows无法安装WSL Ubuntu子系统与Redis安装

前言 在现代计算环境中,开发人员和技术爱好者通常需要在不同的操作系统之间切换,以便利用各种工具和应用程序。在这方面,Windows用户可能发现WSL(Windows Subsystem for Linux)是一个强大的工具,它允许他们…

第六章 块为结构建模 P1|系统建模语言SysML实用指南学习

仅供个人学习记录 概述 块是SysML结构中的模块单元,用于定义一类系统、部件、部件互连,或者是流经系统的项,也用于定义外部实体、概念实体或其他逻辑抽象 块定义图用于定义块以及块之间的相互关系,如层级关系,也用于…

vue+elementUI 设置el-descriptions固定长度并对齐

问题描述 对于elementUI组件&#xff0c;el-descriptions 在以类似列表的形式排列的时候&#xff0c;上下无法对齐的问题。 问题解决 在el-descriptions 标签中&#xff0c;添加属性&#xff1a; :contentStyle"content_style" 控制其内容栏长度 <el-descripti…