Selenium + Python 自动化测试09(多窗口切换)

        我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。

上一篇我们讨论了截图的操作方法,本篇文章我们讲述一下多窗口切换的操作方法。

         在实际的测试项目组中我们可能会遇到多窗口的情况,有时候需要在不同窗口进行切换,下面详细讲述一下具体的操作方法。

1、打开新窗口未切换时定位

下面以百度的页面为例说明:

我们打开了新的窗口,若是不切换直接定位新窗口的元素会报错。如下图:

#打开浏览器并最大化driver.get("https://www.baidu.com")driver.maximize_window()time.sleep(3)#点击贴吧打开一个新窗口driver.find_element_by_link_text("贴吧").click()time.sleep(3)#获取所有窗口句柄,即列表类型handles=driver.window_handles#输入selenium搜索driver.find_element_by_xpath("//*[@id='wd1']").send_keys("selenium")time.sleep(3)

2、增加切换窗口后定位

我们增加切换窗口的代码后执行:

#获取所有窗口句柄,即列表类型,[]序号从0开始的handles=driver.window_handles#切换窗口,切换到第二个窗口driver.switch_to.window(handles[1])

整体的代码如下:

#打开浏览器并最大化driver.get("https://www.baidu.com")driver.maximize_window()time.sleep(3)#点击新闻打开一个新窗口driver.find_element_by_link_text("新闻").click()time.sleep(3)#获取所有窗口句柄,即列表类型,[]序号从0开始的handles=driver.window_handles#切换窗口,切换到第二个窗口driver.switch_to.window(handles[1])#输入selenium搜索driver.find_element_by_xpath("//*[@id='ww']").send_keys("selenium")time.sleep(5)

查看正常执行了搜索:

3、复合元素定位

有时候需要定位一组元素,可以使用find_elements_xx来实现。

下面以百度的设置为例说明。

通过上图查看元素,百度-设置-搜索设置,对应的搜索结果显示条数的选择,对应名字是NR,故复合定位如下

#搜索结果显示条数,这里定位1组元素,是一个列表
many_select=driver.find_elements_by_name('NR')
print(many_select)
#选择第2进行点击,序号也是0开始的,pop(1)即是2
many_select.pop(1).click()
 

全部代码如下请参考:

#打开浏览器并最大化driver.get("https://www.baidu.com")driver.maximize_window()time.sleep(3)#鼠标悬停在设置set_config=driver.find_element_by_xpath("//*[@id='s-usersetting-top']")ActionChains(driver).move_to_element(set_config).perform()time.sleep(1)#点击搜索设置driver.find_element_by_xpath("//*[@id='s-user-setting-menu']/div/a[1]/span").click()time.sleep(2)#搜索结果显示条数many_select=driver.find_elements_by_name('NR')print(many_select)#选择第2进行点击,序号也是0开始的,pop(1)即是2many_select.pop(1).click()time.sleep(5)

执行后看选中了第2个选择项,如下图:

每天进步一点点,继续加油!


http://www.ppmy.cn/devtools/92166.html

相关文章

乡村旅游宣传网站/某城市旅游网站的设计与实现/旅游景点宣传系统

摘要 随着计算机技术,网络技术的迅猛发展,Internet 的不断普及,网络在各个领域里发挥了越来越重要的作用。特别是随着近年人民生活水平不断提高,旅游宣传给用户带来了及大方便。 在经济快速发展的带动下,旅游业的发展也…

第二章 Django view视图

设置url动态参数 view.py def detail(request, req_id):return HttpResponse(req_id:%s % req_id)url.py urlpatterns [path(<int:req_id>/detail, views.detail, namedetail), ]访问 http://0.0.0.0:8080/myapp/11/detail

行业例会2024东莞电力自动化展览会

时间&#xff1a;2024年11月18-20日 地点&#xff1a;广东现代国际展览中心 ◆展会背景background&#xff1a; 在社会生产发展过程中&#xff0c;离不开电力能源的供应&#xff0c;而电力供应也需要相应的…

Java设计模式解析:工厂模式和策略模式的使用场景

Java设计模式解析&#xff1a;工厂模式和策略模式的使用场景 设计模式是软件开发中的重要工具&#xff0c;它们为解决常见问题提供了经过验证的方案。工厂模式和策略模式是两种常见的设计模式&#xff0c;它们在不同的场景下各有优势。本文将深入解析这两种模式&#xff0c;包…

【Linux 从基础到进阶】系统安全加固策略

系统安全加固策略 引言 系统安全加固是保护服务器免受各种威胁和攻击的重要措施。通过实施一系列的安全策略和最佳实践,可以显著提升系统的安全性和可靠性。本文将介绍适用于 CentOS 和 Ubuntu 系统的安全加固策略,涵盖用户管理、权限设置、服务配置、防火墙和日志监控等方…

Qt实现中英文切换中QMessageBox中的中文信息怎么处理

有粉丝看了《Qt实现中英文切换》文章后&#xff0c;留言说“中英文切换中QMessageBox中的中文信息怎么处理”&#xff0c;这篇文章就告诉你处理方法。 1&#xff0c;QMessageBox OK或Cancel提示语句 QMessageBox::information(this, QString::fromLocal8Bit("测试")…

【JavaEE初阶】CAS(比较和交换)

目录 &#x1f332; 什么是 CAS &#x1f333; CAS的应用 &#x1f6a9; 实现原子类 &#x1f6a9; 实现自旋锁 &#x1f384; CAS 的 ABA 问题 &#x1f6a9; 什么是 ABA 问题 &#x1f6a9; ABA 问题引来的 BUG &#x1f6a9; 解决方案 &#x1f340;CAS相关面试题 …

立体相机镜面重建(一)镜面标定

无论是单目、双目或者是多屏幕镜面重建&#xff0c;都需要事先对屏幕和相机的相对位置进行标定&#xff0c;求得相机到屏幕之间的相对变换关系。如果求得屏幕和相机之间的变换关系呢&#xff1f;接下来是标定流程。 &#xff08;一&#xff09;准备&#xff1a; 1&#xff09…

Oracle GoldenGate 19C双向DML\DDL配置实战

目录 一、环境准备并安装GoldenGate 1. 数据库准备情况 2. 下载OGG软件并解压安装 3. 准备OGG环境变量 4. 配置日志模式 5. 创建GoldenGate用户帐号 6. 安装GoldenGate软件 7. 配置源、目标数据库一致 二、 GoldenGate DML同步源端配置 1. 源MGR进程 2. 配置Extract进程组…

Vue3从零开始——如何巧妙使用setup语法糖、computed函数和watch函数

文章目录 一、setup语法糖二、computed函数2.1 computed的基本用法2.2 computed vs methods2.3 注意事项 三、watch函数3.1 watch的基本用法3.2 immediate和deep选项 四、综合小Demo五、总结 一、setup语法糖 之前我们在编写代码时每次都要编写setup()​ ,默认导出配置&#x…

Android Studio中创建apk签名文件

本文以macOS中Android Studio 2021.1.1版本为例介绍创建apk签名文件的操作步骤&#xff1a; 1.启动Android Studio&#xff0c;并打开一个Android项目。 2.依次点击菜单&#xff1a;Build -> Generate Signed Bundle / APK...。 3.在弹出的"Generate Signed Bundle or …

git提交到本地仓库了,怎么撤回

如果你想要撤回已经提交到本地仓库的更改&#xff0c;可以使用以下一些Git命令&#xff1a; 1. **撤回最后一次提交** (不保留更改): - git reset --hard HEAD~1&#xff1a;这会撤销最后一次提交&#xff0c;并且所有的更改都会丢失。 2. **撤回最后一次提交** (保留更改…

TCP全队列连接,tcpdum抓包

TCP全队列连接&#xff0c;tcpdum抓包 1. listen的第二个参数作用2. 理解全连接队列&#xff08;原理&#xff09;3. 为什么要有全连接队列并且队列长度要适当4. 使用不tcpdump 进行抓包&#xff0c;分析TCP过程&#xff08;三次握手&#xff0c;四次挥手&#xff09;4.1安装tc…

非关系型数据库(NoSQL数据库

非关系型数据库&#xff08;NoSQL数据库&#xff09;是一类设计用于大规模数据存储和分布式处理的数据库系统&#xff0c;与传统的关系型数据库&#xff08;如SQL数据库&#xff09;不同&#xff0c;它们通常不遵循传统的表格结构和SQL查询语言。 主要特点包括&#xff1a; 1.…

Java Web —— 第四天(HTTP协议,Tomcat)

HTTP-概述 概念:Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 特点: 1. 基于TCP协议:面向连接&#xff0c;安全 2.基于请求-响应模型的:一次请求对应一次响应 3. HTTP协议是无状态的协议: 对于事务处理没有…

Qt国际化

写在前面 在全球化的今天&#xff0c;软件应用的国际化变得尤为重要。 国际化不仅仅是翻译界面文本&#xff0c;更涉及到日期、时间、货币、数字格式等多方面的适应性调整。 Qt作为一个强大的跨平台应用开发框架&#xff0c;提供了丰富的国际化支持工具&#xff0c;使得开发者…

无缝协作的艺术:Codigger 视频会议(Meeting)的用户体验

在当今数字化的时代&#xff0c;远程协作已经成为工作和学习中不可或缺的一部分。然而&#xff0c;远程协作也面临着诸多挑战&#xff0c;如沟通不畅、信息同步不及时、协作工具的复杂性等。而 Codigger 视频会议&#xff08;Meeting&#xff09;作为一款创新的工具&#xff0c…

2024世界机器人大会将于8月21日至25日在京举行

2024年的世界机器人大会预定于8月21日至25日&#xff0c;在北京经济技术开发区的北人亦创国际会展中心隆重举办。 本届大会以“共育新质生产力 共享智能新未来”为核心主题&#xff0c;将汇聚来自全球超过300位的机器人行业专家、国际组织代表、杰出科学家以及企业家&#xff0…

菜鸡勇闯第136场双周赛

菜鸡鼓足了勇气报名了力扣双周赛&#xff08;后来复盘才知道双周赛更难一点&#xff0c;我真是头铁。。&#xff09; 没想到还拿了个竞赛名次哈哈哈哈哈还在前50%&#xff0c;小力它真的&#xff0c;我哭死 为什么我本科被高数老师忽悠&#xff0c;去打了两年数模o(≧口≦)o 每…