其他api的使用

news2024/9/24 15:27:26

其他api的使用

  • Frame切换
    • frame方法
    • 认识frame
  • 切换多窗口
    • 多窗口方法
    • 认识多窗口
  • 切换多窗口工具封装
    • 切换多窗口工具方法
    • 认识切换多窗口工具
  • 面试题:执行UI自动化时如找不到元素
  • 截图应用
    • 截图方法
    • 认识截图
  • 图片添加的问题
    • 时间戳方法
    • 时间戳认识
  • 验证码处理
    • 验证码方法
      • cookie
    • 验证码认识

Frame切换

frame方法

1、切换到iframe driver.switch_to.frame(iframe元素)
2、操作元素
3、回到默认⻚⾯ driver.switch_to.default_content()

在这里插入图片描述

认识frame

案例:打开‘注册实例.html’页面,完成以下操作
1). 填写主页面的注册信息
2). 填写注册页面A中的注册信息
3). 填写注册页面B中的注册信息

from time import sleep

from selenium import webdriver

# 1、获取浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 2、打开url
driver.get("file:///D:/Chrome/Register.html")

"""
    页面注册A在iframe标签中,验证不处理是否能操作
"""
driver.find_element(By.CSS_SELECTOR,"#user").send_keys("admin")

# 获取注册A iframe元素
A = driver.find_element(By.CSS_SELECTOR, "#idframe1")
# 1、切换到A
driver.switch_to.frame(A)
# 2、注册A操作
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")

# 3、回到默认目录 注册时例.html
driver.switch_to.default_content()

# 4、获取注册B iframe元素
B = driver.find_element(By.CSS_SELECTOR, "#idframe2")
# 5、切换到B
driver.switch_to.frame(B)

# 6、注册B操作
driver.find_element(By.CSS_SELECTOR,"#userB").send_keys("admin")

# 4、关闭浏览器
sleep(3)
driver.quit()

在这里插入图片描述

切换多窗口

多窗口方法

1、获取窗⼝句柄 driver.window_handles
2、使⽤句柄切换窗⼝ driver.switch_to.widnow(handle)
句柄:窗⼝的唯⼀标识符。

认识多窗口

from time import sleep

from selenium import webdriver

# 1、获取浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 2、打开url
driver.get("file:///D:/Chrome/Register.html")

"""
    为什么要处理多窗口?-- selenium默认焦点在启动窗口,要操作其他窗口必须处理。
    需求:
        1、打开注册示例页面
        2、点击注册A网页链接
        3、填写注册A网页内容
"""
print("操作之前所有窗口的句柄:", driver.window_handles)

driver.find_element(By.LINK_TEXT, "注册A网页").click()
handles = driver.window_handles
print("操作之后所有窗口的句柄:", handles)

# 重点:切换窗口
driver.switch_to.window(handles[1])

# 填写注册A网页 用户名
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")


# 4、关闭浏览器
sleep(3)
driver.quit()

在这里插入图片描述

切换多窗口工具封装

切换多窗口工具方法

def switch_window(title):
 # 1、获取所有窗⼝句柄
 handels = driver.window_handles
 # 2、遍历句柄进⾏切换
 for handel in handels:
 # 操作
 driver.switch_to.window(handel)
 # 获取当前窗⼝title 并且 判断是否⾃⼰需要的窗⼝
 if driver.title == title:
 # 操作代码
 return "已找到{}窗⼝,并且已切换成功".format(title)

认识切换多窗口工具

需求:
1、打开注册示例页面
2、点击 注册A网页 注册B网页
3、在A网页和B网页中输入 对用户名输入 admin

from time import sleep

from selenium import webdriver

# 1、获取浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 2、打开url
driver.get("file:///D:/Chrome/Register.html")

"""
   需求:
        如何随心所欲切换窗口?
    思路:
        1、获取所有窗口句柄
        2、切换窗口
        3、获取当前所在窗口title
        4、判断title是否为需要的窗口
        5、执行代码
    需求:
        1、打开注册示例页面
        2、点击 注册A网页 注册B网页
        3、在A网页和B网页中输入 对用户名输入 admin 
"""


def switch_window(title):
    # 1、获取所有窗口句柄
    handels = driver.window_handles
    # 2、遍历句柄进行切换
    for handel in handels:
        # 操作
        driver.switch_to.window(handel)
        # 获取当前窗口title 并且 判断是否自己需要的窗口
        if driver.title == title:
            # 操作代码
            return "已找到{}窗口,并且已切换成功".format(title)


title_A = "注册A"
title_B = "注册B"

# 打开注册A和注册B网页
driver.find_element(By.LINK_TEXT, "注册A网页").click()
driver.find_element(By.LINK_TEXT, "注册B网页").click()

# 填写注册A网页 用户名
print(switch_window(title_A))
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")

print(switch_window(title_B))
driver.find_element(By.CSS_SELECTOR, "#userB").send_keys("admin")

# 4、关闭浏览器
sleep(3)
driver.quit()

在这里插入图片描述

面试题:执行UI自动化时如找不到元素

在这里插入图片描述

截图应用

截图方法

driver.get_screenshot_as_file(“xxx.png”) 1

认识截图

from time import sleep
import time
from selenium import webdriver

# 1、获取浏览器
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# 2、打开url
driver.get("file:///D:/Chrome/%E6%B3%A8%E5%86%8CA%E9%BB%84%E8%89%B2.html")
# 3、查找操作元素

driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("123456")
driver.find_element(By.CSS_SELECTOR,"#telA").send_keys("13600001111")
driver.find_element(By.CSS_SELECTOR,"#emailA").send_keys("123@qq.com")
# 截图
driver.get_screenshot_as_file("register.png")
driver.get_screenshot_as_file("error_{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))

# 4、关闭浏览器
sleep(3)
driver.quit()

在这里插入图片描述

图片添加的问题

时间戳方法

driver.get_screenshot_as_file(“error_{}.png”.format(time.strftime(“%Y_%m_%d
%H_%M_%S”)))

在这里插入图片描述

时间戳认识

import time

print(time.strftime("%Y_%m_%d %H_%M_%S"))

验证码处理

验证码方法

1、去除验证码
2、使⽤万能验证码
3、使⽤图⽚识别技术(识别效率低)
4、使⽤cookie

cookie

由服务器⽣成,存储在客户端的登录凭证

1、获取cookie # 获取所有driver.get_cookies()
2、添加cookie # driver.add_cookie(data)
data = {"name":"BDUSS","value":"由于安全问题,暂时删除。"}

在这里插入图片描述

验证码认识

需求:使用cookie实现跳过登录
1). 手动登录百度,获取cookie
2). 使用获取到的cookie,达到登录目的,然后就可以执行登录之后的操作
BDUSS是登录百度后的唯一身份凭证(*.baidu.com),拿到BDUSS就等于拿到帐号的控制权, 通行贴
吧、知道、百科、文库、空间、百度云等百度主要产品

"""
    需求:使用cookie实现百度登录
    依赖kookies: BDUSS
"""
from time import sleep

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
# 添加cookie
data = {"name": "BDUSS", "value": "由于安全问题,暂时删除。"}
driver.add_cookie(data)
driver.get_cookies()
# 暂停3秒
sleep(3)
# 刷新
driver.refresh()
sleep(3)
driver.quit()

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

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

相关文章

Vulnhub靶机:Kioptrix_2014

一、介绍 运行环境:Virtualbox和vmware 攻击机:kali(192.168.56.101) 靶机:Kioptrix: 2014(192.168.56.108) 目标:获取靶机root权限和flag 靶机下载地址:https://ww…

【07】进阶html5

HTML5 包含两个部分的更新,分别是文档和web api 文档 HTML5 元素表 元素语义化 元素语义化是指每个 HTML 元素都代表着某种含义,在开发中应该根据元素含义选择元素 元素语义化的好处: 利于 SEO(搜索引擎优化)利于无障碍访问利于浏览器的插件分析网页新增元素 多媒体…

从零开始学习typescript系列6: typescript各种类型以及类型特殊使用

基础类型的分类 常用 boolean: 布尔值number: 支持2/8/10/16进制string: 字符串enum: 枚举类型&#xff0c;可根据value找到keyarray: 普通数组&#xff0c;有2种方式&#xff0c;string[]或者 Array<string>tuple: 特殊数组&#xff0c;指定数组里的每个元素的类型&am…

[Halcon学习笔记]标定常用的Halcon标定板规格及说明

1、介绍 大多数标定的要求都是以实心圆或方格来作为标志点&#xff0c;所以一般的标定板为棋盘格或矩阵圆点图&#xff0c;高精度的相机标定过程中&#xff0c;大多是以比较明确的特征点来作为参考&#xff0c;所以通过识别标定板的圆形&#xff0c;拟合出精确的中心位置&…

数据分析-Pandas多维数据平行坐标可视化

数据分析-Pandas多维数据平行坐标可视化 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表…

Kafka Producer异步发送消息技巧大揭秘

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Kafka Producer异步发送消息技巧大揭秘 前言异步发送概述方法实现2. producer.send(msg) 方法详解方法签名和参数说明异步发送示例代码及效果分析 3. producer.send(msg, callback) 方法解析支持事务的…

Java的类与对象

前言 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序&#xff0c;更符合人们…

Java基础--集合

集合 1.可以动态的保存任意多个对象&#xff0c;使用比较方便。 2.提供了一系列方便的操作对象的方法&#xff1a;add&#xff0c;remove&#xff0c;set&#xff0c;get等。 3.使用集合添加&#xff0c;删除新元素的示意代码&#xff0c;简介明了。 集合主要是两种&#xff0…

【Web】记录巅峰极客2023 BabyURL题目复现——Jackson原生链

目录 前言 分析 EXP SignedObject打二次反序列化 打TemplatesImpl加载恶意字节码 前文&#xff1a;【Web】浅聊Jackson序列化getter的利用——POJONode 前言 题目环境:2023巅峰极客 BabyURL 之前AliyunCTF Bypassit I这题考查了这样一条链子&#xff1a; BadAttributeV…

动态规划题目练习

基础知识&#xff1a; 动态规划背包问题-CSDN博客 动态规划基础概念-CSDN博客 题目练习&#xff1a; 题目1&#xff1a;过河卒 题目描述 棋盘上 A 点有一个过河卒&#xff0c;需要走到目标 B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C 点有一个对方的马…

面试算法-68-将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视…

力扣---子集---回溯(子集型回溯)---递归

递归法思路&#xff1a; 首先考虑为什么能用递归&#xff08;因为存在大问题和小问题之间的关系&#xff0c;大问题&#xff1a;从第 i 个数字到最后一个数字之间找子集&#xff0c;小问题&#xff1a;从第 i1 个数字到最后一个数字之间找子集&#xff09;。其次&#xff0c;用…

新版 mac 浏览器乱码

现象 如下图&#xff0c;chrome 浏览器有的乱码了 解决方法 删除字体集中的微软雅黑&#xff08;下图已删除&#xff09;&#xff0c;右键移除

aac可以直接改成mp3吗?快速转换的3个方法~

AAC&#xff08;Advanced Audio Coding&#xff09;文件格式的诞生源于对音频压缩技术的不断追求。由Fraunhofer IIS、杜比实验室、AT&T、索尼等联合开发&#xff0c;旨在提供更高质量的音频压缩效果。AAC文件格式因其出色的音质和高效的压缩算法&#xff0c;成为数字音频领…

NVIDIA NCCL 源码学习(十三)- IB SHARP

背景 之前我们看到了基于ring和tree的两种allreduce算法&#xff0c;对于ring allreduce&#xff0c;一块数据在reduce scatter阶段需要经过所有的rank&#xff0c;allgather阶段又需要经过所有rank&#xff1b;对于tree allreduce&#xff0c;一块数据数据在reduce阶段要上行…

Linux中路径正确但是就是查找不到某个文件

显示文件不存在 Py4JJavaError&#xff1a;调用 o223.partitions 时出错。 &#xff1a; org.apache.hadoop.mapred.InvalidInputException&#xff1a; 输入路径不存在&#xff1a; 首先确定路径是否正确&#xff0c;文件是否存在 然后右键文件查看属性&#xff0c;确定文件…

matlab simulink 电力系统同步发电机励磁系统的建模与仿真

1、内容简介 略 77-可以交流、咨询、答疑 电力系统同步发电机励磁系统的建模与仿真 建立MATLAB的同步发电机励磁调节系统仿真模型&#xff0c;最后建立了以PID和PSS为励磁控制方式的同步发电机励磁调节系统数学模型&#xff0c;在Simulink环境下进行了仿真&#xff0c;收到…

爬虫逆向sm3和sm4 加密 案例

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 案例--aHR0cDovLzExMS41Ni4xNDIuMTM6MTgwODgvc3Vic2lkeU9wZW4 第一步&#xff1a;分析页面和请求方式 …

C++利用开散列哈希表封装unordered_set,unordered_map

C利用开散列哈希表封装unordered_set,unordered_map 一.前言1.开散列的哈希表完整代码 二.模板参数1.HashNode的改造2.封装unordered_set和unordered_map的第一步1.unordered_set2.unordered_map 3.HashTable 三.string的哈希函数的模板特化四.迭代器类1.operator运算符重载1.动…

Vue2(七):脚手架、render函数、ref属性、props配置项、mixin(混入)、插件、scoped样式

一、脚手架结构&#xff08;Vue CLI&#xff09; ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ …