软件测试肖sir__python之ui自动化实战和讲解(03)

python之ui自动化实战和讲解
一、讲解常见控件定位
链接:http://cms.duoceshi.cn/cms/manage/login.do
1、定位文本框,密码框,按钮
2. 输入 :send_keys()方法
3、点击 :click() 方法
在这里插入图片描述
案例:

from   selenium import   webdriver
from  time  import   sleep
dx=webdriver.Chrome()
dx.get("http://cms.duoceshi.cn/cms/manage/login.do")
dx.maximize_window()
sleep(2)
dx.find_element_by_id("userAccount").send_keys('admin')
sleep(2)
dx.find_element_by_id("loginPwd").send_keys('123456')
sleep(2)
dx.find_element_by_id('loginBtn').click()

2、定位普通按钮,链接,隐藏框
网站:https://www.baidu.com/
(1)定位普通按钮

from   selenium import  webdriver
from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.maximize_window()
dx.find_element_by_id("kw").send_keys("dcs")
sleep(2)
dx.find_element_by_id("su").click() #点百度一下按钮

(2)链接


from   selenium import  webdriver
from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.maximize_window()
dx.find_element_by_link_text("地图").click()

(3)隐藏框

案例1:百度中:更多

from   selenium import  webdriver
from  selenium.webdriver.common.action_chains import  ActionChains
from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.maximize_window()
gd=dx.find_element_by_name("tj_briicon")
ActionChains(dx).move_to_element(gd).perform()
sleep(2)
dx.find_element_by_link_text("百科").click()

案例2:百度中的设置
方法1

from   selenium import  webdriver
from  selenium.webdriver.common.action_chains import  ActionChains
from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.maximize_window()
sz=dx.find_element_by_id("s-usersetting-top")
ActionChains(dx).move_to_element(sz).perform()
sleep(2)
dx.find_element_by_link_text("搜索设置").click()

方法2:
注意:shift+ctrl+c

from   selenium import  webdriver
from  selenium.webdriver.common.action_chains import  ActionChains
from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.maximize_window()
dx.find_element_by_id("s-usersetting-top").click()
sleep(2)
dx.find_element_by_link_text("搜索设置").click()

3、获取元素的文本
方法:先使用web元素定位方法定位元素,再使用text获取文本
案例1

from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.maximize_window()
dl=dx.find_element_by_link_text("网盘").text
if dl=='网盘':print('ok')
else:print('no')

案例2:

from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.maximize_window()
dl=dx.find_element_by_xpath('//*[@id="s-top-loginbtn"]').text
if dl=='登录':print('ok')
else:print('no')

4、获取窗口title
获取窗口title,用于断言当前窗口是否打开
方法:driver.title
例子:百度首页title获取并断言
assert driver.title == u’百度一下,你就知道’
注意点:
assert 为断言,判断获取的title是否和预期的’百度一下,你就知道’相同。

案例1:获取一个链接的title

from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
print(dx.title)

案例2:两个窗口覆盖场景,title是

from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.get('https://www.jd.com/')
print(dx.title)
#京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!```案例3:两个窗口重开场景,title是百度一下,你就知道

from time import sleep
dx=webdriver.Chrome()
dx.get(‘https://www.baidu.com/’)
sleep(2)
dx.execute_script(“window.open(‘https://www.jd.com/’)”)
sleep(2)
print(dx.title) #百度一下,你就知道


5、切换窗口
1、通过索引切换(当两个窗口索引位0,1)

rom time import sleep
dx=webdriver.Chrome()
dx.get(‘https://www.baidu.com/’)
sleep(2)
dx.execute_script(“window.open(‘https://www.jd.com/’)”)
sleep(2)
print(dx.title) #百度一下,你就知道
jb=dx.current_window_handle #获取当前句柄
jbs=dx.window_handles
print(jbs)
dx.switch_to.window(jbs[1])
print(dx.title)

(2)通过索引切换(当三个窗口索引位0,2,1)截图:```python
from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.execute_script("window.open('https://www.jd.com/')")
sleep(2)
dx.execute_script("window.open('https://www.hao123.com/')")
sleep(2)
print(dx.title) #百度一下,你就知道
jb=dx.current_window_handle 
#print(dx.jb)
jbs=dx.window_handles
print(jbs )#dx.execute_script("window.open('https://www.jd.com/')")
sleep(2)
dx.switch_to.window(jbs[2])
print(dx.title)

在这里插入图片描述

(3).通过for循环 ,遍历句柄,在切换窗口,在if判断抬头

from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
dx.execute_script("window.open('https://www.jd.com/')")
sleep(2)
dx.execute_script("window.open('https://www.hao123.com/')")
sleep(2)
print(dx.title) #百度一下,你就知道
jb=dx.current_window_handle
#print(dx.jb)
jbs=dx.window_handles  #获取所有的句柄
for  i in  jbs:  #遍历所有的句柄dx.switch_to.window(i)  #根据句柄切换窗口if '京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!' in  dx.title :  #根据title 判断结果break  #结束
print(dx.title)

6、断言:
两种方法:
(1)if 语句断言


from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
if  'qqq' in dx.title:print('ok')
else:print('no')

(2)assert 断言

例子:百度首页title获取并断言
assert driver.title == ‘百度一下,你就知道’
注意点:
assert 为断言,判断获取的title是否和预期的’百度一下,你就知道’相同。


from time  import  sleep
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
# ssert   dx.title=='百度一下,你就知道'  #断言正确就直接通过
assert   dx.title=='qq'  #错误直接报错
sleep(2)
print('运行成功')

在这里插入图片描述
7、下拉框选项
引入类:Select()
from selenium.webdriver.support.select import Select
实战网址:https://www.ctrip.com/
1)select_by_index() #通过下标定位下拉选项
2)select_by_value() #通过value属性值定位下拉选项
3)select_by_visible_text() #通过下拉文本内容内容

案例链接:https://yz.chsi.com.cn/zsml/zyfx_search.jsp
案例:

rom selenium import webdriver
from time  import  sleep
from  selenium.webdriver.support.select import Select
dx=webdriver.Chrome()
dx.get('https://yz.chsi.com.cn/zsml/zyfx_search.jsp')
sleep(3)
dx.maximize_window()
sleep(2)
wz=dx.find_element_by_id("ssdm")
# Select(wz).select_by_value("33") ##通过value属性值定位下拉选项
# Select(wz).select_by_index(1) #根据索引取值,索引从0开始
Select(wz).select_by_visible_text("(33)浙江省")

弹框处理
三种弹框的处理方法:警告型,确认型,输入型弹框
(1).alert 弹框

from selenium import webdriver
from time  import  sleep
from  selenium.webdriver.support.select import Select
dx=webdriver.Chrome()
dx.get('file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/alert%E5%BC%B9%E6%A1%86.html')
sleep(3)
dx.maximize_window()
sleep(2)
tk=dx.switch_to.alert       #切换到弹框            
sleep(2)
# tk.accept() #确认
tk.dismiss()   #取消

(2)、确认型弹框

from selenium import webdriver
from time  import  sleep
from  selenium.webdriver.support.select import Select
dx=webdriver.Chrome()
dx.get('file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/enter.html')
sleep(3)
dx.maximize_window()
dx.find_element_by_class_name("alert").click()  #先点击确认型弹框
sleep(2)
tk=dx.switch_to.alert
sleep(2)tk.accept()
tk.dismiss()

(3)、输入型弹框
输入型弹框:E:\dcs\two\selenium(8)\html弹框\prompt.html

from selenium import webdriver
from time  import  sleep
from  selenium.webdriver.support.select import Select
dx=webdriver.Chrome()
dx.get('E:\dcs\two\selenium(8)\html弹框\prompt.html')
sleep(3)
dx.maximize_window()
dx.find_element_by_class_name("alert").click()
sleep(2)
tk=dx.switch_to.alert
sleep(2)
tk.send_keys("https://www.baidu.com/")
sleep(5)
tk.accept()
# tk.dismiss()

(4)、上传文件类型弹框`

from selenium import webdriver
from time  import  sleep
from  selenium.webdriver.support.select import Select
dx=webdriver.Chrome()
dx.get('file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/upload_file.html')
sleep(3)
dx.maximize_window()
dx.find_element_by_id("file").send_keys(r"E:\dcs\jj\mm\aa.txt")

在这里插入图片描述
9、iframe框处理
定位的元素在iframe标签里面,需要先进入iframe,再进行元素定位
进入iframe框方法:switch_to.frame()
退出iframe框方法:switch_to.default_content()
案例1:
链接:
https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&state=36E3DD5A1AED682BAC2517B3DD6ED5C3960073E9D9390EBE2C90052D4F075102E0C8A02C39201B42692737D2C6AED581&client_id=100273020&redirect_uri=https%3A%2F%2Fqq.jd.com%2Fnew%2Fqq%2Fcallback.action%3Fview%3Dnull%26uuid%3D2e32f17ee0bc4b31a40ee0ab79292592
在这里插入图片描述

from selenium import webdriver
from time  import  sleep
from  selenium.webdriver.support.select import Select
dx=webdriver.Chrome()
dx.get('https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&state=36E3DD5A1AED682BAC2517B3DD6ED5C3960073E9D9390EBE2C90052D4F075102E0C8A02C39201B42692737D2C6AED581&client_id=100273020&redirect_uri=https%3A%2F%2Fqq.jd.com%2Fnew%2Fqq%2Fcallback.action%3Fview%3Dnull%26uuid%3D2e32f17ee0bc4b31a40ee0ab79292592')
sleep(3)
dx.maximize_window()
kwz=dx.find_element_by_id("ptlogin_iframe") #找到iframe框
dx.switch_to.frame(kwz)  #进框
sleep(2)
dx.find_element_by_link_text("密码登录").click()
sleep(2)
dx.switch_to.default_content() #退框
sleep(2)
dx.find_element_by_link_text("服务协议").click()

案例2:
链接:https://mail.163.com/
在这里插入图片描述
10、滚动条
滚动条是由js代码编写的
方法:execute_script()
js1=window.scrollTo(0,20000) #向下滚动20000px
driver.execute_script(js1)
js2=window.scrollTo(0,0) #从底部滚动到顶部
driver.execute_script(js2)

在这里插入图片描述
案例:

from selenium import webdriver
from time  import  sleep
from  selenium.webdriver.support.select import Select
dx=webdriver.Chrome()
dx.get('https://www.jd.com/')
sleep(3)
dx.maximize_window()
sleep(3)
js='window.scrollTo(0,5000)'
dx.execute_script(js)
sleep(5)
js2='window.scrollTo(0,0)'
dx.execute_script(js2)

11、Keys类
from selenium.webdriver.common.keys import Keys
删除单个字符:Keys.BACK_SPACE
全选:Keys.CONTROL,‘a’
剪切:Keys.CONTROL,‘x’
粘贴:Keys.CONTROL,‘v’
点击确定:Keys.ENTER

案例:
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
dx=webdriver.Chrome()
dx.get(‘https://www.baidu.com/’)
sleep(2)
dx.find_element_by_id(‘kw’).send_keys(‘duoceshi’) #输入内容
sleep(2)
dx.find_element_by_id(‘kw’).send_keys(Keys.CONTROL,“a”)#全选
sleep(2)
dx.find_element_by_id(‘kw’).send_keys(Keys.CONTROL,“x”)#剪切
sleep(2)
dx.find_element_by_id(‘kw’).send_keys(Keys.CONTROL,“v”)#粘帖
sleep(2)
dx.find_element_by_id(‘kw’).send_keys(Keys.ENTER)#确认

封装后代码:

from time  import  sleep
from  selenium.webdriver.common.keys import Keys
dx=webdriver.Chrome()
dx.get('https://www.baidu.com/')
sleep(2)
def  kj(zhi,*v):dx.find_element_by_id(zhi).send_keys(v)sleep(2)
if __name__ == '__main__':kj('kw','duoceshi')kj('kw',Keys.BACK_SPACE)kj('kw',Keys.CONTROL,'a')kj('kw',Keys.CONTROL,"x")kj('kw', Keys.CONTROL, "v")kj('kw', Keys.ENTER)

==========================================================
拓展:
时间控件
内嵌
变动id

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

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

相关文章

qwen大模型,推理速度慢,单卡/双卡速度慢,flash-attention安装,解决方案

场景 阿里的通义千问qwen大模型,推理速度慢,单卡/双卡速度慢。 详细: 1、今日在使用qwen-14b的float16版本进行推理(BF16/FP16) 1.1 在qwen-14b-int4也会有同样的现象 2、使用3090 24G显卡两张 3、模型加载的device是auto&#x…

Qt音乐播放器

简介 使用QMediaPlayer和QMediaPlaylist制作的音乐播放器 编译环境 Qt5.6 MGW32 windows10 功能特性 GUI 功能 加载mp3文件,得到歌曲信息;打开文件夹加载或拖拽音乐文件加载滑动条关联播放进度、音量显示/隐藏歌曲列表,编辑歌曲列表&am…

Springboot中开启多线程,实现异步非阻塞、异步阻塞、有无返回值的场景

需求背景 近期项目已上线,闲着没事就对功能进行性能测试,测着测着感觉部分功能效果不是很理想,于是就想着使用多线程的方式对部分接口进行优化,顺便在这里记录下如何选择使用多线程。 实现多线程有两种开启方式:分别…

docker 部署mysql

Centos7为例 NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI_COLOR"0;31" CPE_NAME"cpe:/o:centos:centos:7&qu…

MySql第三篇---索引的创建与设计原则

文章目录 MySql第三篇---索引的创建与设计原则索引的声明与使用索引的分类创建索引在已经存在的表上创建索引删除索引 索引的设计原则哪些情况适合创建索引?限制索引的数目哪些情况不适合创建索引? 小结 MySql第三篇—索引的创建与设计原则 索引的声明与…

flutter开发的一个小小小问题,内网依赖下不来

问题 由于众所周知的原因,flutter编译时,经常出现Could not get resource https://storage.googleapis.com/download.flutter.io…的问题,如下: * What went wrong: Could not determine the dependencies of task :app:lintVit…

docker企业单位私有镜像仓库 Harbor 搭建

docker私有镜像仓库 Harbor 搭建 背景说明使用环境安装部署docker安装docker-compose安装 安装 HarborHarbor UI管理docker 登录docker推送镜像和拉取镜像docker推送镜像docker 拉取镜像 背景说明 为了方便管理docker容器镜像,通常使用各大云平台提供的镜像服务&am…

React环境初始化

环境初始化 学习目标: 能够独立使用React脚手架创建一个React项目 1.使用脚手架创建项目 官方文档:(https://create-react-app.bootcss.com/)    - 打开命令行窗口    - 执行命令      npx create-react-app projectName    说明&#xff1a…

常用Web安全扫描工具合集

漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。那么好用的漏洞扫描工具有哪些? 1、A…

数据结构 哈希表

数据结构 哈希表 文章目录 数据结构 哈希表1. 概念2. 冲突-概念3. 冲突-避免3.1 哈希函数设计3.2 负载因子调节 4.冲突-解决4.1 闭散列4.2 开散列(哈希桶)4.3 哈希桶实现 5. 性能分析6. 和java类集的关系 1. 概念 顺序结构以及平衡树中,元素关键码与其存储位置之间…

QML之Repeater 控件使用

Repeater 控件是 重复作用 根据 model中的index 数量进行重复 废话不说 直接看如何用 当model 为数字时 Rectangle{height: 1200width: 500visible: trueanchors.fill: parentColumn{spacing: 20Repeater{model: 10delegate: Rectangle{width: 60height: 20color: index%2 …

Locust负载测试工具实操

本中介绍如何使用Locust为开发的服务/网站执行负载测试。 Locust 是一个开源负载测试工具,可以通过 Python 代码构造来定义用户行为,避免混乱的 UI 和臃肿的 XML 配置。 步骤 设置Locust。 在简单的 HTTP 服务上模拟基本负载测试。 准备条件 Python…

基于Pix4D使用无人机光学影像制作正射影像(DOM)和数字表面模型(DSM) 操作步骤

基于Pix4D使用无人机光学影像制作正射影像(DOM)和数字表面模型(DSM) 操作步骤 0. 前言1.获取无人机光学影像2.DOM和DSM3.操作步骤3.1 初始界面3.2 新建项目3.3查看处理过程报告3.4查看处理进度和成果 4.在ArcMap中打开DSM和DOM 0.…

学习笔记2——Nosql

学习笔记系列开头惯例发布一些寻亲消息 链接:https://baobeihuijia.com/bbhj/contents/3/194205.html 跟学链接 跟学视频链接:https://www.bilibili.com/video/BV1S54y1R7SB/?spm_id_from333.999.0.0 (建议有java基础的同学学习或者一直…

Mac电脑无法识别移动硬盘怎么办?

很多人都喜欢在Mac电脑上办公、学习,但有时我们将移动硬盘连接Mac电脑时,却会发现电脑无法识别移动硬盘。那么,Mac电脑无法识别移动硬盘怎么办呢? Mac无法识别移动硬盘的原因 导致Mac不识别移动硬盘的原因有很多,你可…

Jmeter(九):jmeter_逻辑控制器与HTTP Cookie管理器详解

Jmeter:jmeter_逻辑控制器_事务控制器 事务 性能测试中,事务指的是从端到端,一个完整的操作过程,比如一次登录、一次 筛选条件查询,一次支付等;技术上讲:事务就是由1个或多个请求组成的 事务…

Java数据结构之稀疏数组

目录 线性结构与非线性结构线性结构非线性结构 稀疏数组应用场景 代码实现二维数组转稀疏数组稀疏数组转二维数组 线性结构与非线性结构 线性结构 数据结构分两种,线性与非线性,线性结构的数据元素之间存在一对一的关系。 一对一指的是每个数据元素都…

Spring中配置文件参数化

目录 一、什么是配置文件参数化 二、配置文件参数化的开发步骤 一、什么是配置文件参数化 配置文件参数化就是将Spring中经常需要修改的字符串信息&#xff0c;转移到一个更小的配置文件中。那么为什么要进行配置文件参数化呢&#xff1f;我们看一个代码 <bean id"co…

Bootstrap的旋转器组件

旋转效果可以用来指示状态&#xff0c;比如页面的加载状态。 可以用类spinner-border实现普通旋转的旋转器效果。 用类spinner-grow实现渐渐变大的旋转器效果。 01-最基本的示例代码 <!DOCTYPE html> <html> <head><meta charset"UTF-8">…

当年很流行,现在已经淘汰的前端技术有哪些?

近几年&#xff0c;前端技术真可谓是飞速发展&#xff0c;不断有新的技术涌现&#xff0c;爆火的前端框架 Astro&#xff0c;前端运行时 Bun&#xff0c;构建工具 Vite 等都给前端提供了强大动力。当然&#xff0c;也有很多前端技术随着技术的发展不再需要使用&#xff0c;有了…