selenium自动化测试入门 —— 浏览器多窗口切换!

news2024/10/5 14:18:16

有时web应用会打开多个浏览器窗口,当我们要定位新窗口中的元素时,我们需要将webDriver的handle(句柄)指定到新窗口。

什么意思?

假设我们打开web应用,在系统运行过程中重新打开一个新窗口(可以是页签,当前浏览器存在两个窗口),这时我们webDriver对浏览器的操作指针(句柄)还再原窗口,如果需要操作新窗口元素就要将handle句柄切换到新窗口。

一、常用方法

driver.current_window_handle 获取当前窗口handle

driver.window_handles 获取所有窗口的handle,返回list列表

driver.switch_to.window(handle) 切换到对应的窗口

driver.close() 关闭当前窗口

二、示例

示例:进入搜狗搜索 --> 打开搜狗输入法页面 --> 输入法页面查看皮肤 --> 关闭搜狗搜索页面 --> 输入法页面查看词库

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://www.sogou.com/')
driver.find_element_by_link_text('搜狗输入法').click()
nowhandle = driver.current_window_handle  # 获得当前窗口
print(driver.current_window_handle)
print('当前窗口为:', driver.title)
allhandles = driver.window_handles  # 获得所有窗口
for handle in allhandles:  # 循环判断窗口是否为当前窗口
   if handle != nowhandle:
       driver.switch_to.window(handle)  # 切换窗口
       time.sleep(2)
print('切换到窗口:', driver.title)
driver.find_element_by_link_text('皮肤').click()  # 操作新窗口元素
driver.switch_to.window(nowhandle)  # 回到原先的窗口
print('回到原来窗口:', driver.title)
driver.close()  # 关闭当前窗口,关闭的是当前的窗口
driver.switch_to.window(driver.window_handles[0])  # 再次切换窗口
driver.find_element_by_link_text('词库').click()
time.sleep(5)
driver.quit()
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

三、封装层函数

在自动化测试中切换窗口页面一般会封装为函数,如下示例:

def switch_to_window(driver, winB):
   """
   :param winB:
       1.切换窗口的标题
       2.切换窗口的序号
       3.切换页面的元素
   :return: True 切换成功
   :Usage:
   driver.switch_to_window('win_name')
   driver.switch_to_window(2) # 切换到第二个窗口
   located=(By.ID,'id') # 确定切换页面的元素
   driver.switch_to_window(located) # 切换到页面中存在located的元素窗口
   """
   result = False
   handles = driver.window_handles
   current_handle = driver.current_window_handle
   if isinstance(winB, tuple):
       for handle in handles:
           driver.switch_to.window(handle)
           time.sleep(2)
           try:
               driver.find_element(*winB)
           except NoSuchElementException:
               pass
           else:
               result = True
               break
       if not result:
           driver.switch_to.window(current_handle)
           time.sleep(2)
   elif isinstance(winB, str):
       for handle in handles:
           driver.switch_to.window(handle)
           time.sleep(2)
           if winB in driver.title:
               result = True
               break
       if not result:
           driver.switch_to.window(current_handle)
           time.sleep(2)
   elif isinstance(winB, int):
       if winB <= len(handles):
           driver.switch_to.window(winB - 1)
           time.sleep(2)
           result = True
   else:
       print('参数错误')
   return result

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

软件测试面试文档

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

在这里插入图片描述

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短视频平台Roposo入驻印尼,会成为下一个Tiktok吗

Roposo是一个印度本土的短视频平台&#xff0c;功能和风格都和Tiktok很相似。 早在2020年7月&#xff0c;印度下令封禁了多个app&#xff0c;其中就包括了TikTok。在那之前&#xff0c;TikTok已经在印度累计了约2亿的用户&#xff0c;基数已经非常的大&#xff0c;那么被封禁之…

ESP32网络开发实例-Web服务器显示BMP180传感器数据

Web服务器显示BMP180传感器数据 文章目录 Web服务器显示BMP180传感器数据1、BMP180介绍2、软件准备3、硬件准备4、代码实现本文将介绍如何在ESP32的Web服务器显示BMP180数据。BMP180传感器可用于测量温度、压力和高度。 我们还可以使用此传感器测量海平面和实际高度的压力。 1、…

荒野大镖客emp.dll文件丢失的怎么办,快速修复游戏dll问题

在玩荒野大镖客这款游戏的过程中&#xff0c;我遇到了一个令人困扰的问题——emp.dll文件丢失。emp.dll是荒野大镖客游戏中的一个动态链接库文件&#xff0c;它负责管理游戏中的一些功能模块。当这个文件丢失时&#xff0c;游戏可能无法正常运行&#xff0c;导致一些功能无法使…

Python武器库开发-常用模块之configparser模块(十六)

configparser模块(十六) ConfigParser模块在python3中修改为configparser.这个模块定义了一个ConfigParser类&#xff0c;该模块的作用就是用来读取配置文件的&#xff0c;使用模块中的RawConfigParser()、ConfigParser()、 SafeConfigParser()这三个方法&#xff0c;创建一个…

Linux实现简易shell

文章目录 &#x1f984;0. shell&#x1f42e;1. 交互及获取命令行&#x1f437;2. 解析命令行&#x1f42f;3. 执行命令行&#x1f405;3.1 普通命令&#x1f405;3.2 内建命令 &#x1f981;4. 主函数逻辑及演示 本章代码gitee仓库&#xff1a;简易shell &#x1f984;0. she…

Python自动化测试如何自动生成测试用例?

传统的测试用例需要测试或者开发人员将用户的操作用代码表示出来&#xff0c;通过断言判断是否和预期一致&#xff0c;写测试用例也占用了部分时间&#xff0c;加上版本迭代测试用例的维护成本也较高&#xff0c;于是基于无埋点的需求相结合自动化测试来检测埋点&#xff0c;及…

行情分析——加密货币市场大盘走势(11.3)

大饼昨日与今日目前都是下跌态势&#xff0c;近期依然要保持逢低做多的策略。现在下跌&#xff0c;可以继续等待&#xff0c;也可以入场一部分仓位的多单&#xff0c;回调才是给机会上车。MACD日线来看&#xff0c;会继续回调&#xff0c;因此这个位置还是可以在等等。 以太昨日…

实践笔记-docker-compose安装

docker-compose 1.在线安装2.离线安装 1.在线安装 # github下载&#xff08;太慢了或者直接下载不了&#xff09; curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose # daocloud下载 c…

【MySQL】015-MySQL索引

【MySQL】015-MySQL索引 文章目录 【MySQL】015-MySQL索引一、MySQL索引是什么1、概述2、好处3、缺点4、索引的使用场景5、常用命令查看数据表上建的索引 二、索引的分类1、三大类2、为什么使用B树作为索引在疑问为什么使用B树这种数据结构之前&#xff0c;先想想什么样的数据结…

网络编程——以太网协议

一&#xff0c;以太网格式 1.1目的地址 这个地址不是IP地址&#xff0c;而是网络中的另一套地址体系&#xff0c;mac 地址&#xff08;物理地址&#xff09;&#xff0c;这个地址的作用与IP地址有一定的重合。因为网络层协议与应用层协议是各自独立被开发的&#xff0c;所以地…

黄仁勋:英伟达预言 2 年内行业将面目全非 一个词形容AI:Unbelievable

本心、输入输出、结果 文章目录 黄仁勋&#xff1a;英伟达预言 2 年内行业将面目全非 一个词形容AI&#xff1a;Unbelievable前言【访谈内容】一个词形容AI&#xff1a;Unbelievable创立英伟达“比想象中难一百万倍”相关图片传送门弘扬爱国精神 黄仁勋&#xff1a;英伟达预言 …

贷款行业极难获客,怎么获取实时客户数据?

我们能想象当客户有贷款需求时会发生什么吗&#xff1f; 客户可能会打开手机搜索“如何借款”、“哪笔贷款利息低”、“最多能借多少钱”、“贷款需要什么条件”等关键词&#xff0c;然后&#xff0c;客户点击进入第一个链接&#xff0c;然后填写他们的姓名和电话号码来测试他…

浅谈无源供电无线测温在线监测系统应用方案

安科瑞 崔丽洁 摘要&#xff1a;无源供电无线测温在线监测系统是一种基于声表面波技术的测温技术&#xff0c;在变电站监测方面得到了很好的技术实践应用。本文对无源供电无线测温在线监测系统研究应用进行分析研究。 关键词&#xff1a;设备检测&#xff1b;无线测温。 引言 在…

vcruntime140.dll无法继续执行代码修复教程

在计算机的世界里&#xff0c;我们经常会遇到各种各样的问题&#xff0c;其中之一就是“vcruntime140.dll缺失”。这个问题可能会影响到我们的正常使用&#xff0c;但是别担心&#xff0c;今天我就来给大家分享一下关于vcruntime140.dll缺失的4种修复方案。 首先&#xff0c;我…

C#完成XML文档节点的自动计算功能

一个项目涉及XML文档中节点的自动计算&#xff0c;就是XML文档的每个节点都参与运算&#xff0c;要求&#xff1a; ⑴如果节点有计算公式则按照计算公式进行&#xff1b; ⑵如果节点没有计算公式则该节点的值就是所有子节点的值之和&#xff1b; ⑶节点有4种类型&#xff0c;计…

内网穿透实现远程访问,如何满足信息安全需求?

内网穿透技术是一种将内网服务映射到外网&#xff0c;从而实现远程访问的技术。它的出现为企业及个人带来了便利&#xff0c;但同时也带来了一定的安全风险。因此&#xff0c;确保内网穿透远程访问内网服务的安全性显得尤为重要。 贝锐旗下内网穿透兼动态域名解析品牌花生壳&am…

【漏洞库】XXL-JOB executor 未授权访问漏洞导致RCE

文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- EXP 编写 漏洞挖掘修复建议 漏洞描述 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。XXL-JOB分为adm…

TCP四次挥手过程解密:为什么不止三次挥手或更少次挥手?

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、三…

使用Postman工具做接口测试 —— 断言与参数提取

引言 下面我会以登录为例&#xff0c;来讲如何利用postman提取上一个接口返回数据&#xff0c;并且放到当前接口来使用。 接口关联(参数提取) 下面以登录接口为例&#xff0c;讲一下postman如何使用参数提取&#xff0c;可以通过Fiddler工具对系统登录操作进行抓包分析&#…

linux报错汇总

1. linux 安装pytorch报错 CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/current_repodata.json> Elapsed: -An HTTP error occurred when trying to retrieve this URL. HTTP errors are o…