UI自动化测试
使用UI自动化测试就是用代码模拟人的操作(点击、输入、滑动、下拉选择、浏览)
分类
-
web 网站
QTP、selenium
-
pc端软件
用的少
-
移动端
appium
一、selenium
用于完成web网页自动化测试,
selenium(化学元素:硒), 不得不提QTP的工具,2004年左右开始出现,qtp(汞)收费的,不开源,所以就使用成本比较高,
硒可以解汞的毒
- selenium1.0
- selenium2.0
- selenium3.0
2016年出现的这个版本,
selenium IDE:提供了将操作转换为代码的功能,会记录人的动作,转换为selenium代码
selenium webdriver: 提供了控制浏览器执行的功能
selenium Grid: 提供了分布式执行测试用例的能力
注意:
谷歌、火狐、edge、ie(已经被放弃)、欧朋) 3.0的时候浏览器都由各自浏览器厂商开发
- selenium4.0
提供了相对定位的功能
selenium Grid:支持k8s上部署
二、安装
1. selenium其实虽然称之为工具,但是实际是python中一个库
pip install selenium==3.14
2.安装浏览器
谷歌、火狐、edge
3.下载浏览器驱动
根据浏览器版本下载 edge(https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)
谷歌的驱动下载网站打不开,所以要使用淘宝的备用地址
创建D:\tools\driver 将驱动放到这个路径中去
要将这个路径添加到环境变量path 中 D:\tools\driver , 添加之后需要重启电脑 才能生效
三、前端
html:页面显示的内容
css:进行样式布局的
js:让页面元素动起来
<!-- 声明写的是一个html代码 -->
<!--
1.一个尖括号是一个标签
2.最外层的是html标签
3.在页面中其实是一个大标签套小标签的过程
-->
<!DOCTYPE html>
<html>
<head>
<!-- 字符集 -->
<meta charset="utf-8">
<!-- 网页的标题 -->
<title>你们最喜欢的小视频网站</title>
</head>
<body>
<!-- <br> 是换行标签 -->
明天是谁唱歌<br>
<!--分割线 -->
<hr >
周六的作业会特别多,然后会很难做,是骗你的!!!<br>
<!-- 字体标签
size:范围1-7 字体由小到大
color:设置字体颜色
-->
<font size="7" color="blue">周末不能请假,我要上自习</font><br>
<font size="6" color="blue">周末不能请假,我要上自习</font><br>
<font size="5" color="blue">周末不能请假,我要上自习</font><br>
<font size="4" color="blue">周末不能请假,我要上自习</font><br>
<font size="3" color="blue">周末不能请假,我要上自习</font><br>
<font size="2" color="blue">周末不能请假,我要上自习</font><br>
<font size="1" color="blue">周末不能请假,我要上自习</font><br>
<!--
img 标签可以引入图片
src:图片路径
height:图片的高
width:图片的宽
-->
<img src="img/5.jpg" height="500px" width="1000px" >
</body>
</html>
文本标签
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文本标签</title>
</head>
<body>
<!-- 标题标签
h1-h6
会自动换行
-->
<h1>张无忌</h1>
<h2>张无忌</h2>
<h3>张无忌</h3>
<h4>张无忌</h4>
<h5>张无忌</h5>
<h6>张无忌</h6>
<!--
分割线
width 宽度
align : 默认居中
可设置左对齐或者右对齐
-->
<hr width="30%" align="left">
<!-- p 标签是段落标签,会自动换行 -->
<p>Windows 一直是世界创新的舞台。它是全球企业的基石,助力众多蓬勃发展的初创公司变得家喻户晓。</p>网络在
<!--加粗倾斜-->
<b>加粗</b>
<i>倾斜</i>
<u>倾斜</u>
<br>
<del>助力众多蓬勃发展</del>
<br>
<!--字体标签font
color:字体颜色
size:从1-7,由小到大
-->
<font color="#8ACD5A" size="7" face="宋体">暮霭程程楚天阔</font>
</body>
</html>
表格标签
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!--
tr:代表一行
th:代表每一个表头单元格,会自动加粗加黑
td:一个普通的单元格
-->
<table border="2px" cellspacing="0px" background="img/5.jpg">
<tr>
<!-- Ctrl + shirt + R -->
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>成绩</th>
</tr>
<tr>
<td>马保国</td>
<td>71</td>
<td rowspan="2">男</td>
<td>49</td>
</tr>
<tr>
<td>雷雷</td>
<td>38</td>
<td>55</td>
</tr>
</table>
</body>
</html>
多媒体标签和超链接标签
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- 图片
width:宽
height:高
title:鼠标悬停时的提示信息
alt:图片地址错误时的信息
-->
<img src="./img/6.jpg" width="500px" height="200px" title="你喜欢吗" alt="糟糕,找不到了!!!">
<!-- 音频 -->
<embed src="【蔡徐坤】能坚持看完!不笑抽了不算.mp3" width="200px" height="50px">
<embed src="鸡你太美原曲.mp4"><br>
<!-- 超链接
target=
"_blank" 会打开一个新的标签页
-->
<a href="http://www.baidu.com">百度一下我就知道</a><br>
<a href="new_file01.html" target="_blank">点我有惊喜</a>
<a href="鸡你太美原曲.mp4">坤坤</a>
</body>
</html>
列表标签
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- 无序列表 -->
<ul type="square">
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>赵六</li>
</ul>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>赵六</li>
</ul>
<!-- 有序列表 -->
<ol type="I">
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>赵六</li>
</ol>
</body>
</html>
锚点设置
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<ul>
<li ><a href="#miao">用户管理</a></li>
<li ><a href="#wang">订单管理</a></li>
<li ><a href="#xing">商品详情</a></li>
<li ><a href="#ren">系统设置</a></li>
</ul>
<a name="miao"></a>
<h1>用户管理</h1>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<a name="wang"></a>
<h1>订单管理</h1>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<a name="xing"></a>
<h1>商品详情</h1>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<a name="ren"></a>
<h1>系统设置</h1>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
<p>张三李四</p>
</body>
</html>
内嵌式框架
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>内嵌式框架</title>
</head>
<body>
<iframe src="new_file01.html" width="500px" height="500px"></iframe>
<iframe src="new_file02.html" width="300px" height="300px"></iframe>
</body>
</html>
实体字符
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
< > "Windows" 一直是世界创新的舞台。®它是全球企业的基石,€助力众多蓬勃发展的初创公司变得家喻户晓
</body>
</html>
三、元素定位
常见的元素定位方式
-
id
如果某个元素的有id属性,那么如果id属性的值唯一,则可以利用该属性的值定位
如果id属性的值是一串无序的字母或者数字,则不能使用,有可能是动态id
driver.find_element_by_id("id属性的值")
-
name
根据name属性的值来定位,但是如果name属性的值在当前页面不唯一,则是无法定位的
driver.find_element_by_name("keyWord")
-
class name
class属性的值,不唯一的可能性很大
driver.find_element_by_class_name('s_ipt')
-
tag name (通过标签名本身选择,一般无法使用,不推荐)
driver.find_element_by_tag_name("标签名")
-
link text (一般不要使用)
driver.find_element_by_link_text("搜索")
-
partial link text(一般不要使用)
driver.find_element_by_partial_link_text("搜")
-
xpath
/ : 代表的直接子节点
//: 后代节点
//a[@href="/EasyBuy/Product?action=queryProductDeatil&id=740"]//img
driver.find_element_by_xpath('//input[@name="keyWord"]').send_keys("洗面奶")
-
css selector
根据标签以及标签的属性进行定位
driver.find_element_by_css_selector('input[name="keyWord"]')
# 如果class属性的值唯一,也可以将其写成css的语法.s_iptdriver.find_element_by_css_selector('.s_ipt')
from selenium import webdriver
import time
# 打开浏览器
driver = webdriver.Edge()
# 设置最大行
driver.maximize_window()
# 设置隐式等待
driver.implicitly_wait(10)
# 打开网页
driver.get("http://172.16.3.153:8888/EasyBuy/Home?action=index")
# 点击 登录 按钮
# driver.find_element_by_css_selector('a[href="/EasyBuy/Login?action=toLogin"]').click()
driver.find_element_by_xpath('//a[@href="/EasyBuy/Login?action=toLogin"]').click()
# 设置等待
time.sleep(2)
# 用户名
driver.find_element_by_id('loginName').send_keys("admin")
# 密码
driver.find_element_by_id("password").send_keys("123456")
# 点击 登录 按钮
driver.find_element_by_css_selector('input[οnclick="login();"]').click()