ios自动化 ——AutomatorX ATX 文档 - iOS 控件操作 API
2017-03-06 16:32
246 查看
环境准备
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
转自https://testerhome.com/topics/7204,作者:codeskyblue
相关文章推荐
- iOS 自动化生成API文档
- 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件
- TC官方文档翻译11----文件操作API(Tokyo Cabinet/Tokyo Tyarnt 文档系列)
- jquery.validate 验证控件的 一个 api 文档 ,希望对有用到的朋友 起到一点作用
- Android自动化追本溯源系列(2):在控件上执行操作
- 基本控件文档-UIButton属性---iOS-Apple苹果官方文档翻译
- 苹果API常用英语名词---iOS-Apple苹果官方文档翻译
- C 语言字符串操作函数API文档说明
- 基本控件文档-UISlider属性---iOS-Apple苹果官方文档翻译
- 利用Aspose.Word控件实现Word文档的操作
- 利用Aspose.Word控件实现Word文档的操作
- 基本控件文档-UILabel属性---iOS-Apple苹果官方文档翻译
- 【Ruby+Watir测试框架系列讲座 4】各类Web控件对象的自动化操作
- 利用Aspose.Word控件实现Word文档的操作
- IOS程序文档目录在模拟器中的地址(Unix操作)
- ios - LKDBHelper - sqlite 数据库 自动化操作 工具类 v1.1版 更新
- C#操作Word(一)——C#中向Word文档中插入Windows控件
- dotNetFlexGrid 控件Api说明文档
- MapABC API for iOS 文档
- IOS中对控件的操作