一.自动化选型
不同点 | selenium类(RF、Katalon、Macaca等) | UFT(QTP) | JS类库(Phantomjs、CasperJS、Puppeteer) |
---|---|---|---|
是否开源 | 是 | 否 | 是 |
支持平台 | Linux、Windows、Mac | Windows | Linux、Windows、Mac |
支持语言 | Python、Perl、PHP、C#等 | VB | JS |
支持浏览器 | ie、chrome、firefox、opera、safari | chrome、firefox、IE | PhantomJS、casperjS不支持、puppeteer:chrome |
支持录制 | 支持 | 支持 | 不支持 |
二.selenium环境搭建(以python示例)
-
python环境搭建
安装验证
- 安装selenium
- 验证是否安装成功:
能够看到selenium的详细信息则安装成功
- 安装浏览器。。。
- 下载浏览器驱动(以chrome为例)
进入淘宝npm镜像网站,进入对应浏览器驱动页面
http://npm.taobao.org/
下载对应浏览器版本的驱动
解压后放到环境变量位置即可
注意:
1.浏览器版本必须要和驱动版本对应,否则会出现调用不起来浏览器或者无法打开网页的问题
2.在firefox48版本以前firefox是不需要浏览器驱动的,但是在firefox48以后需要下载对应版本的geckodriver驱动
- 验证浏览器与驱动是否匹配
成功打开浏览器,并且打开指定网站,通常版本匹配就没问题了
三.录制回放--基于katalon recorder
优点:快速、简单
缺点:难维护
应用场景:适用于只需要完成当前任务,任务完成后不再需要使用了,使用次数较少的场景
目前selenium的录制工具有两种:
1.官方selenium ide
2.katalon recorder
推荐使用katalon recorder ,是katalon studio的子项目,具有比selenium ide更全面的功能
-
下载安装
进入chrome应用商店,搜索katalon recorder,进行安装即可
https://chrome.google.com/webstore/category/extensions?hl=zh-CN
安装成功后,右上角会有对应图标 -
页面主要功能介绍:
-
录制实例:
测试步骤:
打开www.so.com
输入框输入:肯德基
点击搜索按钮
录制过程:
1>点击Record
2>浏览器输入www.so.com
3>点击输入框
4>输入肯德基
5>点击搜索
6>点击stop -
添加断言
-
查看失败截图
-
回放
play:回放当前指定的case
play suite:回放当前case所在测试套件
play all:回放所有case -
数据驱动
-
生成脚本
四.selenium基础api
- 浏览器操作
- 元素定位
以上定位方式都是通过元素的特定属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。还有时候标签确实有id这个属性,但是id又是以一定规则自动生成的,这个时候就可以用xpath和css定位来解决。
- css定位
具有很强的灵活性,同时使用也是相对复杂
常见符号:
#表示 id选择器
.表示 class选择器
>表示子元素,层级
一个空格也表示子元素,但是是所有的后代子元素
- xpath定位与常用函数
XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。通俗一点讲就是通过元素的路径来查找到这个元素
通常上面的方式基本上就可以定位到元素,但是对于一些动态生成的元素,路径重复性很高的元素,为了避免写太长的路径,有时候需要一些逻辑运算与xpath的函数来完成
- 元素操作
- js常用脚本
- 鼠标事件
click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
- 对话框处理(以alert为例,confirm,prompt方法一样)
五.测试用例设计
用例1:打开浏览器,打开指定页面,查找元素,元素操作,断言,关闭浏览器
用例2:打开浏览器,打开指定页面,查找元素,元素操作,断言,关闭浏览器
目的:
1.尽可能少的打开浏览器
2.每个case互不影响
3.减少重复性代码
4.捕获异常try...except...else....finaly
5.保留现场
6.用例需要有说明
分析:
- 使用unittest管理与运行测试用例
- 测试夹具的使用
- 统一管理开启和关闭浏览器
六.selenium grid
例1:测试需要运行ie8,9,10,11四个浏览器
例2:测试需要验证同一个功能在同一个浏览器,但是在不同硬件配置上的执行情况
问题:
1.一台计算机没办法同时安装4个ie,需要运行其他安装不同版本的机器
2.需要运行远程机器上的浏览器
3.不同机器上的运行情况需要上报给主机
selenium grid完美的解决了这些问题
- 什么是selenium grid:宿主机能够运行控制远程机器运行自动化,同时自动收集运行情况的一个服务
- selenium grid使用场景
- selenium grid实例(需要java环境)
第一步:启动一个主节点(运行在宿主机)
日志信息也说明了,客户端需要能够连接的机器名,子节点需要注册到宿主节点
第二步:启动子节点并且注册到宿主节点
日志
第三步:代码改造
七.PageObject模式
- 在写自动化过程中遇到的问题
1.页面频繁变动,导致自动化运行失败,需要修改元素定位
2.一个元素在很多个case中使用,每次更改case需要把所有用到的地方都改一遍
3.case多了维护困难,根本不知道这个元素是哪个地方的
- 什么是PO模式
1.页面对象模型 (POM)是一种设计模式,用来管理维护一组元组集的对象库
2.在 PO模式下,应用程序的 每一个页面都有对page class
3.每一个 page class维护着该 web页的元素集和操作这些方法
- po模式的优点:
1.定位与测试用例分离,便于维护
2.用例更清晰,更易于阅读
- PO模式实例
1.封装driver
2.封装base driver
3.封装页面
4.封装页面元素定位信息
5.编写case
八.selenium使用中的坑
- handle与iframe切换
- 驱动360浏览器
- 驱动ie11浏览器
- jenkins调用远程windows的firefox、chrome
- phantomjs问题