Mac下的UI自动化测试 (三)
使用sikuli进行UI自动化测试固然是方便很多,不用一切都使用AppleScript那烦人的语法,只要界面的UI没有变化,结构的变化不会影响到基于sikuli的自动化,但是基于AppleScript的就会受到影响。
而且使用图像识别进行自动化,会比使用脚本实现的自动化更接近于真实的手动测试,毕竟人就是通过人眼来识别控件的,所以控件在UI上的变化都会影响到sikuli自动化,而对于BVT级别的自动化,重点还是关注与基本功能是否正常,对控件在UI上的变化还是不那么敏感为好。
在我实现一个产品的BVT自动化的时候,需要操作某些视频的缩略图进行上传到云端,和从云端下载下来的测试,其中大量依赖于其测试素材缩略图的识别,而产品在测试过程中发现了一个缩略图不能正常产生的bug,而这个bug势必会影响到我们其他BVT功能的测试。为了不使得这个bug block我们其他基本功能的验证,我采用的是使用AppleScript获取其测试素材在library中的坐标,然后使用一个工具cliclick来对获取到的坐标进行鼠标左右键的单击和双击等操作。
下面是官网上对这个模拟鼠标和键盘操作的小工具的介绍:
“Cliclick” is short for “Command-Line Interface Click”. It is a a tiny shell/Terminal application that will emulate mouse clicks or series of mouse clicks (including doubleclicks and control-clicks) at arbitrary screen coordinates. Moreover, it lets you move the mouse, get the current mouse coordinates, press modifier keys etc.
首先,使用AppleScript获取这个素材的坐标,(由于一个缩略图的操作焦点应该是其正中央的位置,所以在下面的脚本中要进行一次计算,将中间点的坐标输出):
on run argv
set clip_name to item 1 of argv
tell application "RealTimes"
activate
end tell tell application "System Events"
tell process "RealTimes"
tell UI element 0 of scroll area 0 of group 0 of splitter group 0 of splitter group 0 of window 0
tell (1st image whose title is clip_name)
set p to position
set s to size set x to ((item 1 of p) + (item 1 of s) / 2)
set y to ((item 2 of p) + (item 2 of s) / 2) set output to ("" & x & "," & y)
do shell script "echo " & quoted form of output
end tell
end tell
end tell
end tell
end run
在python中,先调用上面的脚本获取坐标,再根据需要的操作使用cliclick的不同参数实现:
def click_item_by_cliclick(name):
command = cliclick_path + " c:{0}"
_run_for_cliclick(name, command) def double_click_item_by_cliclick(name):
command = cliclick_path + " dc:{0}"
_run_for_cliclick(name, command) def right_click_item_by_cliclick(name):
command = cliclick_path + " kd:ctrl c:{0} ku:ctrl"
_run_for_cliclick(name, command) def check_exist_by_cliclick(name):
try:
run_apple_script("get_clip_position_in_library.applescript", name)
except Exception:
return False
return True def _run_for_cliclick(name, command):
co = run_apple_script("get_clip_position_in_library.applescript", name).strip().rstrip('\n')
time.sleep(1)
command = command.format(co)
ret = exec_command(command)
if ret[0] != 0:
raise Exception(ret[1]) def multiple_select_by_cliclick(names):
command = " kd:cmd"
for name in names:
command += " c:" + run_apple_script("get_clip_position_in_library.applescript", name).strip().rstrip('\n')
command += " ku:cmd"
command = cliclick_path + command
ret = exec_command(command)
if ret[0] != 0:
return False
return True
在这里,python充当的就是一个胶水的作用,将AppleScript的输出用在工具cliclick上,并返回结果。
Mac下的UI自动化测试 (三)的更多相关文章
- Mac下的UI自动化测试 (一)
在我看来,实现UI自动化测试的过程一向都是令人快乐的事情,而维护它们就是跟噩梦一样了,尤其是对每次CI产生的build进行BVT测试,由于开发不会告诉你任何UI的变化,那么你拿到的测试结果就势必会一片 ...
- Mac下的UI自动化测试 (二)
下面讲一下Sikuli的重要概念,就是region,所谓region就是Sikuli在进行图像识别的时候的一个区域,默认是整个屏幕. 当然,如果region选得太大的话,并且UI上存在相似的控件,那么 ...
- Mac下的UI自动化测试 (四)
在实际写testcase的时候会使用unittest框架,但是在sikuli中需要使用它提供的command来运行,位于/Applications/SikuliX.app/run,使用-r参数指定要运 ...
- Mac 下纯lua(三)
文件处理 直接使用io调用 io.close();文件流关闭 io.flush():如果文件流以bufferd缓存模式处理,输入不会立即存入文件,需要调用本函数 io.input(file):输入 i ...
- 使用phantomjs进行无界面UI自动化测试
PhantomJS(http://phantomjs.org/) 是一个基于WebKit的服务器端JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM ...
- Jenkins下构建UI自动化之初体验
一.缘 起 笔者之前一直在Windows环境下编写UI自动化测试脚本,近日在看<京东系统质量保障技术实战>一书中,萌生出在jenkins下构建UI自动化测试的想法 二.思 路 首先,在Li ...
- [原创]浅谈Web UI自动化测试
[原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...
- UI自动化测试(三)对页面中定位到的元素对象做相应操作
前两天分别讲述了UI自动化测试基础以及对页面元素该如何进行定位,这一篇自然就是对定位到的页面元素对象进行相应操作啦. 阅读目录 1.常用操作元素对象的方法 2.鼠标事件操作 3.键盘事件操作 4.We ...
- 【Mac + Appium + Python3.6学习(三)】之IOS自动化测试环境配置
在做这一节之前先配置我的另一篇文章所需要安装的前提准备条件:<[Mac + Appium学习(一)]之安装Appium环境前提准备> 一.安装IOS自动化测试环境 配置环境: Appium ...
随机推荐
- swing之checkbox
import java.awt.GridLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax ...
- CentOS7.2 GitLab部署
1.使用安装包的方式安装gitlab # vim /etc/yum.repos.d/gitlib.repo [gitlab-ce] name=gitlab-ce baseurl=http://mirr ...
- Linux驱动 - SPI驱动 之四 SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...
- bash 中的行处理命令 awk
转自:http://blog.chinaunix.net/uid-23302288-id-3785105.html
- Python使用SMTP模块、email模块发送邮件
一.smtplib模块: 主要通过SMTP类与邮件系统进行交互.使用方法如下: 1.实例化一个SMTP对象: s = smtplib.SMTP(邮件服务地址,端口号) s = smtplib.SMTP ...
- 已有项目使用Asset Pipeline管理静态资源
1. 修改项目中指向静态资源文件的链接 a) 访问静态资源文件 <%= stylesheet_link_tag "application", media: " ...
- js防止重复点击
表单元素 disabled 没有之一. el.prop('disabled', true); ajax({}).done(function() { el.prop('disabled', false) ...
- android opencv
最近工作需求:用opencv来先做一个demo.扫描照片进行边缘检测和透视矫正. 之后会加入照片降噪等处理. 请教了一下搞图像的同事.他的提议: 1.绿盟的“黄色照片检测” 用的是动态的opencv库 ...
- maven ...../.m2/settings.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- solr :term 查询, phrase查询, boolean 查询
搜索总体有:term 查询, phrase查询, boolean 查询 1. SOLR搜索覆盖度和准确度保证的三个搜索方式: 保证准确率: AND: Search for two different ...