Selenium自动化测试入门:浏览器多窗口切换【建议收藏】

news2024/9/24 17:19:18

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

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

三、封装层函数

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

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/1976113.html

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

相关文章

一篇了解:性能测试工具——JMeter的安装

一、下载 环境要求&#xff1a;Java版本在8及以上。 安装链接&#xff1a;JMeter安装链接 下载压缩包之后解压即可。 二、配置 解压之后进入到bin目录下&#xff0c;双击jmeter.bat即可进入到该软件。 但是有一种更方便的方式进入jmeter软件&#xff1a; 复制该文件的bin文件…

MySQL操作表

文章目录 1.增加表2.查看表3.修改表修改表名&#xff1a;插入数据&#xff1a;新增一列&#xff1a;修改一列类型&#xff1a;修改列名&#xff1a;删掉一列&#xff1a; 4.删除表 1.增加表 创建表语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datat…

深入理解Kubernetes中的Pod:为什么需要Pause Pod及其核心作用

引言 在Kubernetes这一强大的容器编排系统中&#xff0c;Pod作为最小的部署和管理单位&#xff0c;扮演着至关重要的角色。本文将进一步深入探讨Pod的定义、基本概念&#xff0c;特别是为什么需要Pause Pod&#xff0c;以及Pod内部容器如何共享资源&#xff0c;同时解释Kubern…

从核心到边界:六边形、洋葱与COLA架构的深度解析

文章目录 1 引言2 软件架构3 架构分类4 典型的应用架构4.1 分层架构4.2 CQRS4.3 六边形架构4.4 洋葱架构4.5 DDD 5 COLA架构设计5.1 分层设计5.2 扩展设计5.3 规范设计5.3.1 组件规范5.3.2 包规范5.3.3 命名规范 6 COLA架构总览7 小结 1 引言 软件的首要技术使命&#xff1a;管…

转世重生之当程序员从零开始,不可错过的Jupyter Notebook的详细安装教程 ♪(^∇^*)

一、前期准备工作 &#x1f609; Jupyter Notebook是基于Python的&#xff0c;因此首先需要确保您的计算机上安装了Python。建议安装Python 3.7或更高版本。Python下载网站链接&#xff1a;Python。 pip是Python的包管理工具&#xff0c;用于安装和管理Python包。在大多数情况下…

进程通信(7):互斥锁(mutex)和条件变量

互斥锁(mutex)用于互斥访问临界区&#xff0c;只允许一个线程访问共享变量。 条件变量可以让获取互斥锁 的线程在某个条件变量上等待&#xff0c;直到有其他线程把他唤醒。 互斥锁和条件变量通常一起使用实现同步。 互斥锁的操作 lock(mutex)&#xff1b; // 获取锁&#xff…

达梦数据库:链接数据库报错:无效的模式名[xxx]

目录 简介达梦数据库驱动报错信息排查原因解决 简介 1、对接达梦数据库 2、链接数据库时报错 3、达梦数据开启了大小写敏感 达梦数据库驱动 <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version&…

C语言程序设计-[1] 基础语法

1、字符集 字符集&#xff1a;是ASCII字符集的一个子集。 注&#xff1a;基本上就是电脑键盘可以输入的一些字符。 2、标识符 标识符&#xff1a;用来命名程序中的一些实体&#xff0c;如&#xff1a;变量、常量、函数、数组名、类型名、文件名等。由一个或多个字符组成。 —…

设计模式-六大设计原则

1、单一职责原则&#xff08;Single Responsibitity Principle&#xff09; 一个类或者模块只负责完成一个职责&#xff1b; 【实例】 上面这个类&#xff0c;当此类只是用来展示用户信息&#xff0c;则设计符合单一职责&#xff1b;当此用户的地址经常需要使用&#xff0c;比…

20240803---特征选择与稀疏学习

1.特征选择&#xff1a;在机器学习任务中&#xff0c;通过样本的特征预测样本所对应的值。 &#xff08;1&#xff09;无关特征&#xff1a;通过空气的湿度、环境的温度、风力、当地人的男女比例来预测明天是否下雨。男女比例属于无关特征。 &#xff08;2&#xff09;冗余特征…

SSM学习11:springboot基础

教学视频 黑马程序员SpringBoot3Vue3全套视频教程&#xff0c;springbootvue企业级全栈开发从基础、实战到面试一套通关 springboot基础 搭建项目 修改配置文件 修改application.yml&#xff08;后缀名不对&#xff0c;可以改成这个&#xff09;&#xff0c;配置数据库 spr…

基础实验回顾

一、虚拟机网络设定 克隆一台node1 在node1上进行网络配置 进入网卡配置目录 # 红帽9网卡配置文件目录&#xff0c;其他版本不一样 [rootlocalhost ~]# cd /etc/NetworkManager/system-connections/网卡配置文件 [rootlocalhost system-connections]# vim ens160.nmconnect…

@Value获取值和@ConfigurationProperties获取值用法及比较(springboot)

目录 1. 简介1.1 value基本用法 1.2 ConfigurationProperties基本用法 2. 使用2.1 value的使用创建application.yml创建Person.java创建Dog类写一个测试类 2.2 ConfigurationProperties的用法创建Person2.javaDog类写测试类 3. 区别3.1 松散绑定例子 3.2 SpEL主要用途特点例子 …

240803-沉侵式翻译插件配置Ollama的API实现网页及PDF文档的翻译

1. 在插件中点击Options按钮 2. 在开发者模式中启动Enable Beta Testing Features 3 在General中进行设置 ## 4. 在Expand中设置API的URL 5. Qwen&#xff1a;0.5B网页翻译效果 6. Qwen&#xff1a;0.5BPDF翻译效果 7. 参考文献 gemma - 给沉浸式翻译插件配置本地大模型o…

剪画小程序:致敬奥运举重冠军:照片变成动漫风格!

在巴黎奥运会的赛场上&#xff0c;那些奥运冠军们的身影如同璀璨星辰&#xff0c;闪耀着无尽的光芒&#xff01; 看&#xff0c;举重冠军力拔山兮气盖世&#xff0c;那坚定的眼神中透露出无畏的勇气&#xff0c;爆发的力量更是震撼人心。 借助剪画&#xff0c;将这令人心潮澎湃…

【Vue】computed计算对象不生效问题?

问题描述 最近使用vuex来管理全局状态&#xff0c;遇到了computed计算state中数据却不生效的问题。 原因分析&#xff1a; 先看vue官网示例&#xff1a; computed接收的是一个getter函数&#xff0c;但是这个getter函数是懒加载并且有缓存的&#xff0c;当计算属性最终计算…

ORACLE和PG的饭圈文化

饭圈文化: 就是FANS! 饭圈&#xff0c;网络用语中指粉丝圈子的简称&#xff0c;另外“粉丝”一词的英文单词为“fans”&#xff0c;单词fans本身由fans构成&#xff0c;s一般表示多个&#xff0c;其中的fan可以直接音译为“饭”。 [1]粉丝群体叫“饭”&#xff0c;他们组成的…

特定领域软件架构-系统架构师(三十八)

软件架构复用 有三个阶段&#xff1a; 首先构造/获取可复用的软件资产其次管理这些资产&#xff08;构件库&#xff09;最后针对这些需求&#xff0c;从这些资产中选择可复用的部分&#xff0c;满足需求应用系统。 特定领域软件架构 DSSA&#xff08;Domain Specific softwa…

小程序背景图片无法通过 WXSS 获取

问题&#xff1a;pages/index/index.wxss 中的本地资源图片无法通过 WXSS 获取 可以使用网络图片&#xff0c;或者 base64&#xff0c;或者使用标签。 将图片转换为base64&#xff0c;地址 base64图片在线转换工具 - 站长工具 在这里把要使用的图片转换一把&#xff0c;然后将得…

xss漏洞(三,xss进阶利用)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 1&#xff0c;本文基于dvwa靶场以及PHP study进行操作&#xff0c;靶场具体搭建参考上一篇&#xff1a; xss漏洞&#xff08;二&#xff0c;xss靶场搭建以及简单…