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

一、多窗口切换

浏览器打开的窗口其实会有一个叫做句柄的概念。
句柄就类似于每一个标签页的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.mzph.cn/news/153706.shtml

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

相关文章

ModBus TCP/RTU 报文解析

Modbus Tcp https://gitee.com/szwzhsz/Modbus-TCP-client-server-DotNetty.?_fromgitee_search 固定协议格式 事务标识(2byte):00 00,可变(递增) 协议标识(2byte):00 00,固定 长度(2byte):00 06,可变 单…

SD3403/SS928 烧录 Uboot Kernel Rootfs是什么

Uboot : 我们知道系统上电之后,需要一段程序来进行初始化 。 Boot(Universal Boot Loader),即通用Bootloader,是用来引导启动内核的,它的最终目的就是从flash中读出内核,放到内存&#xff08…

PySide6 Tutorials (一)表格小部件魔改

前言 Pyside6官方教程给了一个使用表格显示颜色的教程,原教程地址如下:源地址, 结合前面button信号的学习,就魔改添加了如下功能:增加一列按钮,可以修改该行的颜色值,通过点击按钮生成指定的颜…

深度学习之生成唐诗案例(Pytorch版)

主要思路: 对于唐诗生成来说,我们定义一个"S" 和 "E"作为开始和结束。 示例的唐诗大概有40000多首, 首先数据预处理,将唐诗加载到内存,生成对应的word2idx、idx2word、以及唐诗按顺序的字序列。…

万字解析设计模式之代理模式

一、代理模式 1.1概述 代理模式是一种结构型设计模式,它允许通过创建代理对象来控制对其他对象的访问。这种模式可以增加一些额外的逻辑来控制对原始对象的访问,同时还可以提供更加灵活的访问方式。 代理模式分为静态代理和动态代理两种。静态代理是在编…

【Android11】AOSPSettings增加蓝牙开关

基于Android11增加一个蓝牙开关按钮然后控制蓝牙开关 首先控制蓝牙开关的逻辑很简单,bluetoothAdapter.disable();就可以关闭。这里需要用到android.bluetooth.BluetoothAdapter; 1.找到蓝牙界面的xml文件加个按钮 --- a/packages/apps/Settings/res/xml/connect…

Day01 嵌入式 -----流水灯

一、简单介绍 嵌入式系统中的流水灯是一种常见的示例项目,通常用于演示嵌入式系统的基本功能和控制能力。流水灯由多个发光二极管(LED)组成,这些LED按照一定的顺序依次点亮和熄灭,形成一种像水流一样的流动效果。 二、…

单/三相dq解耦控制与特定次谐波抑制

1. 单相整流器dq坐标系下建模 单相整流器的拓扑如图所示,可知 u a b u s − L d i s d t − R i s {u_{ab}} {u_{s}} - L\frac{{d{i_s}}}{{dt}} - R{i_s} uab​us​−Ldtdis​​−Ris​。   将电压和电流写成dq的形式。 { u s U s m sin ⁡ ( ω t ) i s I …

选择「程序员」职业的8个理由

软件开发人员是具有创建软件程序的创意和技术技能的专业人员,是一个具有高回报和挑战性的职业选择。如今,软件开发人员几乎在每个行业工作。随着世界变得越来越数字化,越来越需要具有技术背景的人来创建特定的软件应用程序。 如果您考虑做一…

【React】classnames 库(可添加多个 className 类名)

文章目录 前言&#xff1a;在项目中我们有时候需要添加多个className&#xff0c;这时候就需要用到这个库了 例如&#xff1a;我们想得到这样一个效果 <div classclass1 class2></div>但是在react中&#xff0c;我们没办法像上面那样去实现&#xff0c;所以我们得…

纯JS,RSA,AES,公钥,私钥生成及加解密

通过网络找的JS源文件&#xff0c;修改后使用&#xff0c;包含RSA 密匙对生成 及AES 加解密 涉及的JS源文件 下载 GitHub - cgrlancer/RSA-AES: 纯js,RSA,AES前端加解密 前端引用 import {generateRsaKeyWithPKCS8,encryptByRSA,decryptByRSA,encrypt,decrypt,testRsa} fr…

文心一言-情感关怀之旅

如何让LLM更有温度。 应用介绍

【精选】XML技术知识点合计

XML概述 概念 XML&#xff08;Extensible Markup Language&#xff09;&#xff1a;可扩展标记语言 可扩展&#xff1a;标签都是自定义的。 发展历程 HTML和XML都是W3C&#xff08;万维网联盟&#xff09;制定的标准&#xff0c;最开始HTML的语法过于松散&#xff0c;于是W…

使用Java解决快手滑块验证码

分析页面结构&#xff1a; 使用浏览器开发者工具分析快手滑块验证码页面的HTML和JavaScript结构&#xff0c;找到滑块验证的相关元素和事件。 模拟滑块滑动&#xff1a; 使用Java的Selenium库或其他网络爬虫工具&#xff0c;模拟用户在滑块上的操作。你需要模拟鼠标点击、拖动…

企业要满足什么条件才能实施CRM系统?

CRM的作用相信大家也所有了解&#xff0c;但并不是所有的企业都适合实施CRM。或者说&#xff0c;大部分企业实施CRM并不会100%的成功。那么&#xff0c;企业实施CRM的条件是什么&#xff1f;下面我们就来说一说。 1、业务规模 如果您的客户数量较少&#xff0c;没有复杂的客户…

二分查找——34. 在排序数组中查找元素的第一个和最后一个位置

文章目录 1. 题目2. 算法原理2.1 暴力解法2.2 二分查找左端点查找右端点查找 3. 代码实现4. 二分模板 1. 题目 题目链接&#xff1a;34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 给你一个按照非递减顺序排列的整数数组 nums&#…

苹果手机数据迁移,简单方法送给大家!

当我们准备更换新的苹果手机时&#xff0c;最令人头疼的问题就是如何将旧手机的数据迁移到新手机上。无论是什么手机&#xff0c;数据迁移确实是一个比较繁琐的过程。 但是&#xff0c;只要我们掌握了正确的方法&#xff0c;那么这个过程就会变得简单许多。苹果手机数据迁移的…

护眼灯亮度多少合适?亮度适合学生的护眼台灯推荐

护眼灯亮度满足国AA级标准就好了。可以肯定的是&#xff0c;护眼灯一般可以达到护眼的效果。 看书和写字时&#xff0c;光线应适度&#xff0c;不宜过强或过暗&#xff0c;护眼灯光线较柔和&#xff0c;通常并不刺眼&#xff0c;眼球容易适应&#xff0c;可以防止光线过强或过…

go map字典操作

类型断言 断言 在现代化 程序中 有助于 终止代码 , 防止 更大的 错误产生 package mainimport "fmt"func main() {var i interface{} "hello"s : i.(string)fmt.Println(s)s, ok : i.(string)fmt.Println(s, ok)f, ok : i.(float64)fmt.Println(f, ok)f…

老友小明哥-个人简介

b站个人主页&#xff08;可以看看免费视频&#xff09;&#xff1a;老友小明哥的个人空间-老友小明哥个人主页-哔哩哔哩视频