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 ...
随机推荐
- 【LeetCode】028. Implement strStr()
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- 让人蛋疼的“Oracle.DataAccess.dll”
项目介绍:为前台网站提供rest接口来操作erp相关数据 涉及db:oracle11 技术方案:因为erp是用remoting来调用,我想rest实现部分调用remoting来操作减少耦合,当然性能上 ...
- 纯JS实现房贷利率报表对比
最近朋友买房,想计算下自己的房贷的还款情况,自己正好周末没事,从网上找来点代码修改,也算是对自己技术的巩固吧. 目前这个还只是个初级版本,暂时可以在PC上正常访问,将来会一步一步的把相继功能都加上的, ...
- bzoj 1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 当然是邻接矩阵做转移矩阵来快速幂. 对于鳄鱼,好在它们周期的lcm是12,也就是每12 ...
- CentOS7.2 Jenkins部署
1.安装配置java环境 直接下载二进制安装包: # tar xvf jdk-8u111-linux-x64.tar.gz -C /usr/local/src/ # ln -sv /usr/local ...
- Idea编译器 报@Override错误
据说这是jdk的问题,@Override是JDK5就已经有了,但有个小小的Bug,就是不支持对接口的实现,认为这不是Override 而JDK6修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现 ...
- Java 的标识符
标识符: 在写代码的时候为了增强代码的阅读性会自定义很多名字,如:类名.方法名.变量名等 这种名称成为标识符 标识符命名规则: 由字母(可以是中文).数字.下划线.$ 组成,但不能以数字开头 大小写敏 ...
- 2011-12-14 调用cmd并获得输入输出+网络访问
System.Diagnostics.Process pro = new System.Diagnostics.Process(); pro.StartInfo.FileName = "cm ...
- Java中Object.hashCode contract
面试时在这个问题上犯了个错误,只重写了equals方法,而没有覆盖hashCode()方法. 回来重读了Effective Java的Item 9,里面提到Object.hashCode contra ...
- 很详细的Nginx配置说明
这篇文章主要为大家分享了一篇很详细的Nginx配置说明,主要内容包括Nginx常用功能.Nginx配置文件结构,想要了解Nginx配置的朋友不要错过,参考一下 Nginx是lgor Sysoev为 ...