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

news2024/12/23 6:20:19

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.coloradmin.cn/o/1119387.html

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

相关文章

uniapp在线预约到家按摩系统安装部署二次开发 可以搭建H5公众号+小程序+APP

后端Thinkphp框架开发。前端采用uni-app开发,适配多端(小程序+公众号H5+APP)源码全开源。 Nginx1.22.1Mysql5.6php7.3redis扩展 支持h5、公众号、小程序、APP,提供相关教程和详细功能文档! 含开…

LeetCode算法刷题(python) Day41|09动态规划|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 动规五部曲LeetCode 509. 斐波那契数LeetCode 70. 爬楼梯LeetCode 746. 使用最小花费爬楼梯 动规五部曲 确定dp数组以及下标的含义确定递归公式dp数组如何初始化确定遍历顺序举例推导dp数组 LeetCode 509. 斐波那契数 力扣题目链接 本题最直观是用递归方法 class Sol…

GIL全局解释器锁

文章目录 GIL全局解释器锁一、引入:二、GIL介绍三、GIL与Lock四、GIL与多线程总结 GIL全局解释器锁 一、引入: 首先要明白,GIL并不是Python的一个特性,其实在我们通常所称呼的Python解释器,其实是CPython解释器&…

excel, 熟悉了一般应用的函数,为何还有必要学vba

背景: 1. win10, office 2016, hp Elitebook笔记本电脑 2. 统计数量时,在sheet (工作表)页面使用函数 sum通过类似 sum(c6:c8) 进行求和,其中C7未被计算在内,例子见图片或附件。即使使用 “数据透视表”…

基于QT的学生考勤系统

低价有偿-获取代码: 知识付费时代,低价有偿获取代码,请理解! (1) 下载链接: 后补。 (2) 添加博主微信获取(有偿),备注来源: mryang511688 项目描述 技术:C、QT等 摘要: 信息技术的迅…

【Andriod】Appium的不同版本(Appium GUI、Appium Desktop、Appium Server )的安装教程

文章目录 前言一.Appium GUI二.Appium Desktop三.Appium Server 命令行版本1.安装node.js2.安装Appium Server 前言 Appium 安装提供两2方式:桌面版和命令行版。其中桌面版又分为 Appium GUI 和 Appium Desktop。 建议:使用Appium Desktop 一.Appium …

ubuntu安装Anaconda

下载 Anaconda 进入 Ubuntu,自己新建下载路径,输入以下命令开始下载 注意,如果不是 x86_64,需要去镜像看对应的版本(https://mirrors.bfsu.edu.cn/anaconda/archive/?CM&OA) wget https://mirrors.…

【Java 进阶篇】深入了解 Bootstrap 表格和菜单

表格和菜单是网页设计中的重要组成部分,它们用于展示数据、导航和用户交互。Bootstrap 是一个强大的前端框架,提供了丰富的表格样式和菜单组件,使开发者能够轻松创建功能丰富的网页。在本文中,我们将深入探讨 Bootstrap 中表格和菜…

火热的“出海潮”背后,你还应该知道些什么?

点击文末“阅读原文”即可报名参会 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 联合制作 / RTE开发者社区 过去几十年,入华的科技企业“走进来”,加速了国内企业的数…

VM虚拟机创建centos7 64位系统提示此主机不支持64位客户机操作系统,此系统无法运行

VM虚拟机创建centos7 64位系统提示此主机不支持64位客户机操作系统,此系统无法运行 背景解决方案 背景 本身系统是window10 64位专业版系统,理论上不应该不支持64位的。 解决方案 最近安装docker开启了虚拟化hyper-v,关闭即可。 打开cmd(…

Vue中的v-if和v-show指令有什么区别?

在Vue中,v-if和v-show是两个常用的指令,用于根据条件控制元素的显示和隐藏。虽然它们都可以根据条件来切换元素的可见性,但它们的实现和行为有一些区别。 1:编译时机: v-if是在编译阶段进行条件判断,如果条件为false,则在DOM中不会渲染该元素及其子元素;v-show则是在运…

MongoDB深度学习

MongoDB的简介 什么是MongoDB? MongoDB是一个基于分布式文件存储的数据库,由C语言编写。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,它支持的数据结构非常松散&…

解码eBPF可观测性:eBPF如何改变我们所知的观测性

让我们来看看eBPF——这项技术到底是什么,它如何影响观测性,它与现有的观测性实践有什么区别,未来可能会发生什么变化? 在过去的两年里,云原生社区一直在热烈讨论eBPF。eBPF曾是KubeCon、eBPF Days和eBPF Summit的主题…

SystemVerilog Assertions应用指南 Chapter 1.17使用参数的SVA检验器

1.17使用参数的SVA检验器 SVA允许像 Verilog那样在检验器中使用参数( parameter),这为创建可重用的属性提供了很大的灵活性。比如,两个信号间的延迟信息可以在检验器中用参数表示,那么这种检验器就可以在设计只有时序关系不同的情况中重用。例子1.2显示了个带延迟默…

【C++】一些C++11特性

C特性 1. 列表初始化1.1 {}初始化1.2 initializer_list 2. 声明2.1 auto2.2 typeid2.3 decltype2.4 nullptr 3. STL3.1 新容器3.2 新接口 4. 右值引用5. 移动构造与移动赋值6. lambda表达式7. 可变参数模板8. 包装器9. bind 1. 列表初始化 1.1 {}初始化 C11支持所有内置类型和…

Spring中自定义类型转换器

目录 一、什么是类型转换器 二、自定义类型转化器 2.1 实现Converter接口 2.2 在Spring中注册 三、自定义类型转换器中的细节 3.1 解决代码的耦合 3.2 注册标签id值必须唯一 ​3.3 Spring提供的日期转换器 一、什么是类型转换器 在Spring中类型转换器就是将配置文件中的字符串…

力扣一.链表的运用

一.合并生序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 输入:l1 = [], l2 = [] 输出:[] 输入:l1 = [], l2 = [0] 输出:[0]提示: 两个链表的…

【【萌新的FPGA学习之管脚设定xdc文件】】

萌新的FPGA学习之管脚设定xdc文件 xdc文件可以自己设置 也可以匹配 我们根据正点原子的流水灯管脚设定 主要讲述一下 各个英文设计是什么意思 Name:工程中顶层端口的名称。 Direction:说明管脚是输入还是输出。 Neg Diff Pair:负差分对&…

YOLOv5/v7/v8改进实验(三)之训练技巧篇

🚀🚀 前言 🚀🚀 YOLO系列是一种目标检测算法,具有高效的实时性能和较高的准确性。一些常用的YOLO训练技巧往往可以帮助提高模型的性能和收敛速度。而这些技巧在YOLOv5、YOLOv7和YOLOv8几乎通用。 🔥&#…

CUDA编程入门系列(十一)CUDA程序优化技巧

优化原则:最大化并行执行 探索并行化: 优化线程块的规模 我们在设计CUDA程序的时候,要对线程块的个数进行考虑。因为GPU中流处理器SM的数量是相对固定的,所以我们应该尽量的将多个block放到同一个SM当中(至少保证每个…