【Python测试开发】:切换窗口和表单

news2024/11/20 13:24:18

一、多窗口切换

浏览器打开的窗口其实会有一个叫做句柄的概念。
句柄就类似于每一个标签页的ID一样,具有唯一性。

1.1 语法

  • 获取当前窗口句柄,注意后面没有括号哦~
driver.current_window_handle
  • 获取所有窗口句柄,结果以列表格式存储,注意后面没有括号哦~
driver.window_handles
  • 根据句柄切换页面
driver.switch_to.window(要切换窗口的句柄)

1.2 案例

  操作步骤:
1、打开百度首页
2、输入框输入“马蓉”
3、点击回车
4、点击“马蓉”百度百科
4、在百度百科页面点击“编辑”
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep

# 打开浏览器
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.maximize_window()

# 打开网页
driver.get('https://www.baidu.com/')
# 定位搜索框
search_box = driver.find_element(By.ID, 'kw')
search_box.send_keys('马蓉')
search_box.send_keys(Keys.ENTER)

# 点击马蓉百度百科标题,进入详情页面(打开了一个新窗口)
driver.find_element(By.XPATH, '//div[@id="content_left"]/div//h3/a').click()

# 获取所有窗口句柄,结果保存在列表里
handle_list = driver.window_handles
# 打印出来看看结果
print(handle_list)
# 根据每个窗口的句柄唯一,来进行窗口切换
driver.switch_to.window(handle_list[-1])

# 在新窗口点击“编辑”链接
driver.find_element(By.LINK_TEXT, '编辑').click()
# 关闭浏览器

二、表单切换

2.1 背景

在同一个页面上,也可能存在元素不在同一个iframe标签里面的情况,因此要实现对元素的定位,需要先切换到元素所在的ifame标签,再根据八种元素定位方式进行元素定位。
在这里插入图片描述

2.2 语法

  • 切换到最外层iframe
driver.switch_to.default_content()
  • 切换到任意iframe
1、定位到iframe标签
2、driver.switch_to.frame()

switch_to.frame()中可以写iframe标签的id和name属性的值,但是id和name属性的值要唯一
switch_to.frame()中可以写通过其他元素定位方式定位的iframe标签对象,比如以下案例就是使用这种方式。

2.3 案例

  操作步骤:

1、打开163邮箱登录页面
2、定位账号和密码输入框,并输入账号和密码
3、点击 登录 按钮
4、点击页面上的“VIP”
  • 如下图,可以知道账号和密码元素都有"ID"属性,但是,刷新页面可以知道ID属性为动态变化的,因此不可用于元素定位
  • 根据经验:ID属性值长长一串类似乱码的格式,都是不可以用于元素定位的,因此保险起见,都是采用其他元素定位方式
    在这里插入图片描述
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(3)

# 打开网页
driver.get('https://mail.163.com/')

# 切换表单
# 定位表单元素
iframe_element = driver.find_element(By.XPATH, '//div[@id="loginDiv"]/iframe')
# 切换
driver.switch_to.frame(iframe_element)

# 账号输入框
driver.find_element(By.NAME, 'email').send_keys('abc')
# 密码输入框
driver.find_element(By.NAME, 'password').send_keys('1122333')
# 点击 登录 按钮
driver.find_element(By.ID, 'dologin').click()

# 切换到最外层ifame
driver.switch_to.default_content()

# 点击最外层表单的VIP字段
driver.find_element(By.CSS_SELECTOR, 'a[href="https://vipmail.163.com/?from=fmail"]').click()
sleep(3)
# 关闭浏览器
driver.quit()

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

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

相关文章

『亚马逊云科技产品测评』活动征文|开发一个手机官网

『亚马逊云科技产品测评』活动征文|开发一个手机官网 授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 前言 …

java系列之 页面打印出 [object Object],[object Object]

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 🏷️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

心梗救治日:我希望他们都能活着到急诊

点击文末“阅读原文”即可参与节目互动 后期 / 朱峰 监制 / 姝琦 运营 / 卷圈,Sand 封面 / 姝琦midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 联合制作 / 美国心脏协会 当意外发生,这期节目可能会让你从手足无措,变成应对有序。 …

Geovia 2022 新功能

​GEOVIA是达索系统3DEXPERIENCE平台旗下品牌产品之一。GEOVIA目前侧重于矿业工程行业,主要用于地理空间大场景建模与仿真模拟,提高整个自然资源部门的可预测性、效率、安全性和可持续性。 新增功能介绍 01.角色更新 达索系统于2021年11月发布了GEOVIA…

国学短剧《我是小影星》栏目火热开拍

近日,国学短剧《我是小影星》栏目花絮拍摄,在上海市徐汇区漕溪路595号A座B1层开拍。该节目招募全国各地的有才华,有表现力怀揣梦想的小朋友来参与节目拍摄。节目旨在以中华传统文化为切入点,通过戏剧、歌舞、音乐等多种艺术形式的…

解析紫光展锐T820 5G芯片——让照片接近原色

紫光展锐系统级安全的高性能5G SoC芯片平台T820,采用八核CPU架构,6nm EUV先进工艺,金融级全内置安全方案,在性能、功耗与5G通信体验等方面,较上一代产品更为出色。 此前,已经为大家讲解过T820的拍照、安全性…

为什么我学了 6 个月 Python,还是找不到工作?

在知乎上有一个特别火的问题: 为什么学了Python,我还是找不到工作? 有人说Python语言不行,有人说中国Python根本就没公司用。在大家群嘲的背后,我们来分析一下: 为什么大家都不看好Python? 学…

hadoop 日志聚集功能配置 hadoop(十一)

由图所示,本文主要是将三台机器log 进行日志聚集查看。图更加直观 1. 首先需要配置历史服务器配置,才可以配置日志聚集功能: hadoop 配置历史服务器 开启历史服务器查看 hadoop (十)-CSDN博客 2. 配置了三台服务器,hadoop22, ha…

uni-app - 弹出框

目录 1.基本介绍 2.原生uinapp 通过uni.showActionSheet实现 3.使用组件 Popup 弹出层 ③效果展示 1.基本介绍 弹出框让我们在需要时在屏幕底部弹出一个菜单,它通常用于在各种应用程序中进行选择操作。Uniapp为我们提供了基本的底部弹出框组件,但它也有…

单线圈无刷直流电机的电机驱动芯片GC1262E/S属于国产芯片可替代APX9262S/茂达

GC1262E/S 是单线圈无刷直流电机的 电机驱动器。 GC1262E/S 具有高效的直接 PWM 控制方式,它可以控制无刷直流电机转 速。它集成了最低速度限制模式、可调速度 斜率控制模式、软启动模式、风扇转速计、 锁保护、自动重启、TSD、OCP 和噪声控制模 式,噪声…

Ubuntu环境下基于libxl库文件使用C++实现对表格的操作

功能 表格不存在则创建后再进行操作创建sheet添加新的工作表在sheet中增加数据设置单元格样式 相关配置 下载地址:libxl选择 LibXL for Linux 4.2.0 i386 x64 armhf aarch64 安装配置 1,使用 tar zxvf 文件名.tar.gz 进行文件解压2,创…

【开源】基于Vue.js的森林火灾预警系统的设计和实现

项目编号: S 019 ,文末获取源码。 \color{red}{项目编号:S019,文末获取源码。} 项目编号:S019,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟…

【Linux】Linux的常用基本指令

Linux常用基本指令 Linux指令的历史背景前言说明一、 ls 列出文件中的所有内容常用选项 二、pwd 显示当前所在目录进程三、cd 将当前工作目录改变到指定的目录下常用样例 四、touch 1. 更改文档或目录的日期时间 2. 新建一个不存在的文件常用选项 四、mkdir 1. 更改文档或目录的…

队列OJ--循环队列

目录 题目链接:622. 设计循环队列 - 力扣(LeetCode)​​​​​ 题解: ​编辑 代码实现: 完整代码: 题目链接:622. 设计循环队列 - 力扣(LeetCode)​​​​​ 题解&#x…

html页面直接使用elementui Plus时间线 + vue3

直接上效果图 案例源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"../js/vue3.3.8/vue.global.js"></script><link rel"styles…

全国见!飞桨星河社区五周年,邀你共赴大模型盛宴!

自2018年对外发布以来&#xff0c;飞桨星河社区已汇集660万AI开发者。感谢大家一路见证了飞桨星河社区的成长&#xff0c; 也很荣幸飞桨星河社区陪伴了大家的AI开发旅程。 在这个大模型时代&#xff0c; 飞桨星河社区期待可以帮助开发者们实现自我价值&#xff0c; 获得更多成长…

Androidstudio中build.gradle classpath如何添加

Androidstudio中build.gradle classpath如何添加 build.gradle classpath如何添加 build.gradle classpath如何添加 升级as之后&#xff0c;gradle版本也升级了&#xff0c;导致project的build.gradle中的写法也不一样了。 buildscript {repositories {google()mavenCentral(…

A*寻路算法

广度优先算法搜索以广度做为优先级进行搜索。 从起点开始&#xff0c;首先遍历起点周围邻近的点&#xff0c;然后再遍历已经遍历过的点邻近的点&#xff0c;逐步的向外扩散&#xff0c;直到找到终点。 这种算法就像洪水&#xff08;Flood fill&#xff09;一样向外扩张。直至…

CRM系统的销售预测是什么?怎么做?

简单来说&#xff0c;销售预测可以通过销售关键信息为团队预测收入&#xff0c;分配目标。CRM中的销售预测可以帮助企业制定合理的销售目标和策略&#xff0c;并通过实时数据发现瓶颈所在&#xff0c;提高团队绩效。下面说说CRM中销售预测是什么&#xff1f;如何销售预测&#…

广度优先算法(BFS)

广度优先算法&#xff08;Breadth-First Search&#xff09;是在图和树领域的搜索方法&#xff0c;其核心思想是从一个起始点开始&#xff0c;访问其所有的临近节点&#xff0c;然后再按照相同的方式访问这些临近节点的节点&#xff0c;这种访问方式类似涟漪泛起&#xff0c;一…