点击上方“
AirPython
”,选择“置顶公众号”
第一时间获取 Python 技术干货!
![640?wx_fmt=jpeg](https://img-blog.csdnimg.cn/img_convert/925c74408f9269435a5e0fa656324e4d.png)
阅读文本大概需要 5 分钟。
很多读者看过之前的文章,发现我使用最多的是一款 Airtest 的自动化测试框架。
Airtest 是一款适合于游戏和 App 的 UI 自动化测试框架。
下面对 Airtest 在平时自动化和爬虫过程中的常见问题做一个汇总。
1、
优势
Airtest 上手难易度低,高效方便,结合 Python 脚本,可以完成一些自动化的操作,也可以快速开发出一款 App 端的爬虫。
2、
AirtestIDE 还是 Pycharm
如果只是简单的一些操作,可以使用官网提供的 AirtestIDE,通过简单的拖拽、按压、点击就能完成脚本录制和回放操作。
![640?wx_fmt=jpeg](https://img-blog.csdnimg.cn/img_convert/95808a8ff093a96475295a952d2e38c8.png)
当然,想完成一些复杂的操作,就需要在 Python 虚拟环境下安装 pocoui 依赖库,然后借助 Pycharm 编写 Python 脚本来完成。
3、
Airtest 结合 Python 操作
只需要在 Python 虚拟环境下安装 pocoui 依赖库。
pip3 install pocoui
4、
有线连接和无线连接
利用 Airtest 驱动手机完成自动化操作,有两种方式:
有线连接、无线连接。
有线连接
:手机通过数据线连接 PC,确保使用 adb devices 命令能找到设备。
然后,通过下面的 Python 代码即可以完成连接操作。
# 通过有线连接 PC 端和手机
self.poco = AndroidUiautomationPoco(screenshot_each_action= False)
auto_setup( __file__)
self.poco = AndroidUiautomationPoco(screenshot_each_action= False)
auto_setup( __file__)
无线连接
:保证手机和 PC 在同一个网段,使用 adb 启动手机端的 adb 端口,然后使用下面的 Python 代码完成连接操作。
# 通过 adb 命令开启手机端的 adb 端口
adb tcpip 6666
# 通过 Python,无线连接 PC 和手机
device = connect_device('android:///192.168.1.166:6666?cap_method=javacap&touch_method=adb')
poco = AndroidUiautomationPoco(device_1, screenshot_each_action=False)
auto_setup(__file__)
adb tcpip 6666
# 通过 Python,无线连接 PC 和手机
device = connect_device('android:///192.168.1.166:6666?cap_method=javacap&touch_method=adb')
poco = AndroidUiautomationPoco(device_1, screenshot_each_action=False)
auto_setup(__file__)
5、
常用操作
只需要通过 Android SDK 中的 Monitor 工具识别到元素 ID 或者文本,然后借助 Poco 依赖库完成常见的操作。
常用手势操作包含:点击、长按、滑动。
# 点击1
poco(元素ID).click()
# 点击2
poco(text= u'元素文本内容').click()
# 长按
poco(元素ID或者元素文本).long_click(长按的时长)
# 滑动到下一页
poco.swipe([起始坐标x轴, 起始坐标y轴], [终点坐标x轴, 终点坐标y轴], duration=滑动时长)
poco.swipe([ 0.5, 0.8], [ 0.5, 0.3], duration= 1)
# 滑动到上一页
poco.swipe([ 0.5, 0.3], [ 0.5, 0.8], duration= 1)
poco(元素ID).click()
# 点击2
poco(text= u'元素文本内容').click()
# 长按
poco(元素ID或者元素文本).long_click(长按的时长)
# 滑动到下一页
poco.swipe([起始坐标x轴, 起始坐标y轴], [终点坐标x轴, 终点坐标y轴], duration=滑动时长)
poco.swipe([ 0.5, 0.8], [ 0.5, 0.3], duration= 1)
# 滑动到上一页
poco.swipe([ 0.5, 0.3], [ 0.5, 0.8], duration= 1)
pocoui 已经封装了页面的常用操作,包含:回到桌面、模拟手机返回键、锁屏键、截屏、卸载、打开应用等操作。
# pocoui 封装的一些方法
# 打开应用
def start_app(package, activity=None):
# 停止应用
def stop_app(package):
# 截屏
def snapshot(filename=None, msg=""):
# 回到桌面
def home():
# 模拟按键操作
# 模拟页面返回操作
keyevent( 'BACK')
# 打开应用
def start_app(package, activity=None):
# 停止应用
def stop_app(package):
# 截屏
def snapshot(filename=None, msg=""):
# 回到桌面
def home():
# 模拟按键操作
# 模拟页面返回操作
keyevent( 'BACK')
6、
异常处理
由于 Airtest 是一款 UI 测试框架,对可见的元素能通过元素 ID 或者文本内容拿到元素,处理列表的时候,滑动的时候经常会导致元素异常,这里要做好异常处理。
# 处理列表元素
try:
self.__handle_good_list()
except:
pass
try:
self.__handle_good_list()
except:
pass
7、
元素获取不到
借助 Android SDK 中的 Monitor 查看元素属性,会发现有些元素没有 ID 和文本,这时候可以查看 UI 树的结构,找到一个可以确定的元素,通过父子关系拿到这个元素。
8、
点击无效
有的时候,通过 pocoui 拿到元素对象,但是点击没有效果。
这种情况,可以通过反复点击,直达某个元素出现来解决这个问题。
# 点击搜索按钮
while True:
# 等待检索结果列表出现
if not self.poco(元素ID).exists():
# 再次点击
perform_click( self.poco(元素ID, text= '搜索'))
else:
break
while True:
# 等待检索结果列表出现
if not self.poco(元素ID).exists():
# 再次点击
perform_click( self.poco(元素ID, text= '搜索'))
else:
break
推荐阅读
![640?wx_fmt=jpeg](https://img-blog.csdnimg.cn/img_convert/854d4b41f1b11e5d510bdc37b8384f41.png)
THANDKS
- End -