ios自动化 ——AutomatorX ATX 文档 - iOS 控件操作 API

环境准备

  • Mac电脑
  • iPhone手机(实在没有,用模拟器也行)
  • WebDriverAgent 首页有说明,把他运行起来就好。
  • Python(这个要会用)目前ATX兼容py2.7,理论上兼容py3.4但是还没测试过
  • AutomatorX

    ATX(AutomatorX的简称)的安装不看文档也可以,反正也不难,两个命令就装好了

    pip install --pre --upgrade atx
    pip install opencv_python
    

接口列表

为了方便调用WDA,于是写了一个纯Python的WDA客户端facebook-wda,如果有些接口下面的文章没有提到,在该项目的README,或者代码中或许可以发现一些彩蛋。

连接设备

如果连接的是真机的话,还需要通过iproxy将手机监听的8100端口转发到本地来。

这里假设你启动的WDA的地址是http://localhost:8100

import atx

d = atx.connect("http://localhost:8100")

后面的接口都会默认你已经有d这个变量了

应用的启停

需要知道应用的bundleId,可以通过ideviceinstaller -l查到。

d.start_app('com.apple.Health') # 启动默认的健康程序
d.stop_app()

基本操作

屏幕大小,这里是实际显示的大小。截图是多大,返回的就是多大

dis = d.display
print dis.width, dis.height

截图

image = d.screenshot() # 返回PIL图片
image.save("screen.png") # 保存成文件,这个是PIL的基础用法。其他的什么旋转,抠图,还有很多

坐标点击

d.click(20, 30)

滑动

d.swipe(300, 400, 300, 100, 1.0) # 从(300, 400)滑动到 (300, 100) 时间1.0s (默认0.2s)

其他

d.home() # 点击Home键

选择控件

浏览器打开WDA的inspector窗口


右上角的用户图标,我们可以根据Class,Name,Label来定位

# 根据所有属性定位
elem = d(class_name="Button", name="profile", label="profile")
# 使用下标定位,界面上的第2个Button(下标是从0开始的)
elem = d(class_name="Button", index=1)
elem = d(class_name="Button")[1] # 跟上面的命令等价

通过xpath定位

xpath有很多的规则,我用的很少,欢迎高手留言补充。这种操作比较慢,但是功能强大

elem = d(xpath="//Button")

控件操作

elem.exists # 判断控件是否存在
len(elem) # 返回符合条件元素的个数

elem.click() # 等待并点击
elem.click(timeout=5.0) # 5s之内还有出现符合条件的元素,直接跑异常。timeout目前默认都是90s
elem.wait(timeout=5) # 等待目标的出现
elem.tap_hold(2) # 长按2s

# elem.swipe('up') # 这个接口目前没有了,有待更新

elem.bounds # 返回namedtuple,这个坐标体系还需要乘以 d.scale 才能转化成ATX的坐标体系。
# Returns
# Rect(x=279, y=29, width=25, height=25)

# 获取元素的属性
elem.class_name
elem.text # 这个跟inspector中的Name一个意思
elem.value
elem.enabled # 是否启用
elem.displayed # 这个还真的很少用

刚才的应用进入到用户界面,点击Edit,会进入到这个界面,正好可以演示下怎么输入这个功能

用inspector可以看到元素的结构是这个样子的

输入框

为了确保不被所谓的联想字符,自动修正所干扰,打开输入法设置界面,将所谓的联想输入都关闭掉。
是否支持中文呢?刚试了下,竟然支持(自己都觉得惊讶)

为了找到输入框,不得不用复杂的xpath了,xpath的使用我参考了这篇文章http://www.cnblogs.com/songshu120/p/5182043.html

elem = d(xpath="//Cell[@label='First Name']/TextField")
elem.set_text("James") # 设置文本
elem.value # 获取刚刚输入的文本
elem.clear_text() # 清空刚刚输入的文本

除了这种方法还有另外一种方法

elem.click() # 使输入框处于激活状态
d.type("James")
d.type("\b\b") # 删除两个字符

Scroll

s(text="Vitals").scroll() # scroll to visible
s(text="Login").scroll().click() # 滑到到该元素,然后点击
s(text="Hello").scroll(direction="right", timeout=5.0) # 指定滑动的方向向右,方向有4个up | down | left | right
# 有点尴尬了,我也不记得下面两个是干什么用的了
s(text="Hello").scroll(text="World")
s(text="Hello").scroll(text_contains="World")

警告框

目前封装的一般般,但也可以酬和着用

d.session.alert.text # 当前弹出框的文本
d.session.alert.accept() # 点击弹出框的确认
d.session.alert.dismiss() # 点击弹出框的取消

DONE


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该项目是为了让手机应用的一些常规测试可以自动化起来,让测试人员摆脱那些枯燥的重复性工作。 基于OpenCV的图像识别技术,有点类似于SikuliX(这东西挺好用的,只是没说要支持手机端)这个项目诞生在网易游戏频繁的测试中,所以这个项目主要是为了支持游戏的测试。atxAutomatorX的简称,目前是作为一个python库使用,安装方法也超级简单pip install atx安装完这个之后,再安装python-opencv就完成了最终的安装。有了它,平常枯燥的刷副本,主线任务,就不再这么头疼了。特征完全的黑盒测试框架,无需知道项目代码,非侵入式可是很好的支持安卓手机的测试,包括安卓模拟器支持Windows应用的测试对于游戏测试,可以使用图像缩放的方法适应不同分辨率的手机历史起源以前写过一个项目 https://github.com/netease/airtest,atx是airtest的重构版本,。 因为原版代码冗余太严重,维护成本太高,所以就新开了一个新的项目。新版有哪些新的功能呢?与原版主要变化简化安装方式,只需要安装opencv以及通过pip安装atx 无其他依赖支持原生UI元素的查找和点击截图方式重原有缓慢的adb截图,改成默认uiautomator截图,可选minicap截图(1080x1920手机截图平均耗时0.2s)优化图像的自动缩放算法,以便同样的脚本可以适应不同的机器支持Watch用法,可持续监控界面,当某个元素出现时执行特定操作截图客户端从网页服务器变成了python-Tkinter写的客户端 使用python -matx gui启动支持dir(dev) 查看元素已有的方法(-_-! 之前代码写的不好,并不支持)更稳定的依赖库控制,与travis持续集成,可在代码更新后自动发布到pypi移除性能监控功能,暂时移除iOS支持图像匹配默认使用模版匹配,将SIFT匹配改为可选

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值