一、Airtest的介绍

1)Airtest的简介

    Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。
Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。
Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,
然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。

2)关于自动化测试,Airtest更多的用作自动化测试

概念:自动化测试,就是把繁杂的人工测试用例利用自动化测试工具编写成代码,让机器代替人工自动跑用例的过程。实际上就是把以人为驱动的测试行为转化为机器执行的一种过程。
意义:节省人力、物力、时间、硬件资源等,提升测试效率,特别对于繁琐重复的测试用例,可以使测试人员更专注于新的测试模块的建立和开发,从而提高测试覆盖率。

3)配置手机连接

[Airtest简介]
网易出品的一个自动化测试工具
* 可以基于图像识别来完成自动化测试
* 可以基于poco控件来完成自动化测试 [安装]
官网下载:https://airtest.netease.com/changelog.html
解压即用 [配置手机]
. 打开 AirtestIDE
. 将手机打开开发者模式
. USB链接手机
. 在右上角点击connect
. 出现界面即可

二、python语言操作手机

1)左下标选择安卓,生成初始化代码

# -*- encoding=utf8 -*-
__author__ = "hp" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

2)打开微信

2.1)第一种方式,通过 应用名字打开

# 打开微信
poco(text='微信').click() # click 点击事件

2.2)打开应用app的名称

第一步获取应用app的名称

# 查看当前手机上的app的包,有哪些,找到需要打开的包
dev = device()
print(dev.list_app(third_only=True)) # 获取所以的应用的包名
# com.tencent.mm 为微信的包名

第二步,打开微信。如果知道了包名,第一步可省略,直接使用

# 打开app
start_app('com.tencent.mm')

3)根据标签选择需要的信息

# 晒选对话框
items_elements = poco(name='com.tencent.mm:id/b9g').offspring(name='com.tencent.mm:id/b9i') # offspring 为子孙节点 # 选择出所有的名字
for item in items_elements:
name = item.get_text()
print(name)

4)抢红包代码

# -*- encoding=utf8 -*-
__author__ = "hp" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) # 打开app
start_app('com.tencent.mm') # 晒选对话框
items_elements = poco(name='com.tencent.mm:id/b9g').offspring(name='com.tencent.mm:id/b9i') # offspring 为子孙节点 # 选择出所有的名字
names = []
for item in items_elements:
name = item.get_text()
names.append(name)
print(names) def get_red_pakets():
# 实现抢红包,选择历史消息,进行反转poco("com.tencent.mm:id/ae").child("android.widget.RelativeLayout")[]
msg_elements_list = poco(name="android.widget.RelativeLayout").children() # 获取别人发的消息
# 反转消息
msg_lists = []
for item in msg_elements_list:
msg_lists.insert(,item) for msg in msg_lists: # 第一次循环出来的就是最后一个元素,也是最新的元素
# 判断红包是否存在
red_key_element = msg.offsping(name='com.tencent.mm:id/asn')
# 已领取元素定位
not_red_key = msg.offsping(name='com.tencent.mm:id/aso') if red_key_element: # 说明有红包,别管有没有抢过
# 判断抢没有抢过
if not_red_key.exists() and not_red_key.get_text() == '以领取':
print('已经抢过了')
continue
else:
print('有新红包了')
msg.click() # 点红包 # 开红包
kai_elements = poco(name='com.tencent.mm:id/czt')
if kai_elements.exists():
kai_elements.click() # 返回对话框
keyevent('BACK')
else:
print('没有红包!')
continue # 进入对话框
target = 'myfriend'
if target in names:
index = names.index(target) # 计算出列表的索引
items_elements[index].click() # 进入该对话框 while True:
get_red_pakets()
sleep() # 每一秒检查一次

5)归纳总结

[Airtest简介]
网易出品的一个自动化测试工具
* 可以基于图像识别来完成自动化测试
* 可以基于poco控件来完成自动化测试 [安装]
官网下载:https://airtest.netease.com/changelog.html
解压即用 [配置手机]
. 打开 AirtestIDE
. 将手机打开开发者模式
. USB链接手机
. 在右上角点击connect
. 出现界面即可
.自动生成代码 在poco辅助款左下角选择 安卓 [打开微信]
先找到包名
device()
dev.list_app()
指定包名打开
start_app(包名) [选择对话框]
poco来定位元素的位置
offspring是选择子孙节点,包括儿子,孙子,重孙子
补充 --> children 是选择子节点,只包括儿子
get_text() 选择节点上对应的文本 [选择对话列表]
FILO --> First In First Out
LIFO --> Last In First Out
Proprietary [总结]
注意空间元素的选取
children 和 offspring的使用
Airtest可以实现手机app的爬虫
可以直接使用 Airtest运行多个手机 --> 群控
结合 MitmProxy来实现爬虫,MitmProxy抓包工具,可以过滤请求与响应

基于Airtest实现python自动抢红包的更多相关文章

  1. Python自动抢红包,超详细教程,再也不会错过微信红包了!

    目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言 提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一 ...

  2. 微信自动抢红包android实现

    AccessibilityService-微信自动抢红包 2018年02月01日 16:09:06 阅读数:1757 在领导发红包的时候,看到有些同事在1s.2s抢到红包,为什么他们能够这么快?一定是 ...

  3. 基于Appium、Python的自动化测试

    基于Appium.Python的自动化测试环境部署和实践   第一章 导言 1.1 编制目的 该文档为选用Appium作为移动设备原生(Native).混合(Hybrid).移动Web(Mobile ...

  4. 基于TensorRT 3的自动驾驶快速INT8推理

    基于TensorRT 3的自动驾驶快速INT8推理 Fast INT8 Inference for Autonomous Vehicles with TensorRT 3 自主驾驶需要安全性,需要一种 ...

  5. Python自动补全

    转自:http://blog.linuxeye.com/324.html Python自动补全有vim编辑下和python交互模式下,下面分别介绍如何在这2种情况下实现Tab键自动补全. 一.vim ...

  6. linux终端python自动提示

    linux终端python自动提示 很多时候,在linux下编写python时, 都懒得去vi一个新文件,直接就新开一个终端, 进入python命令行模式,然后就可以写一些测试代码. 不过最悲剧的就是 ...

  7. 一步一步实现iOS微信自动抢红包

    微信红包 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能.   此教程所需要的工具/文件 yololib class-dump dumpdecrypte ...

  8. 从用python自动生成.h的头文件集合和类声明集合到用python读写文件

    最近在用python自动生成c++的类.因为这些类会根据需求不同产生不同的类,所以需要用python自动生成.由于会产生大量的类,而且这些类是变化的.所以如果是在某个.h中要用include来加载这些 ...

  9. python自动安装mysql5.7

    python自动安装mysql5.7 python版本:python2.6 centos版本:centos6.9 mysql版本:mysql5.7.19 安装目录路径和数据目录路径都是固定,当然也可以 ...

随机推荐

  1. QT生成可执行的EXE程序

    [转载] Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里 ...

  2. ltp-ddt eth iperf

    ETH_S_PERF_IPERF_TCP_8K_1448B source 'common.sh'; run_iperf.sh -m -M 1500 -f M -d -t 60 -w 8K run_ip ...

  3. CSS3选择器 ::selection选择器

    “::selection”伪元素是用来匹配突出显示的文本(用鼠标选择文本时的文本).浏览器默认情况下,用鼠标选择网页文本是以“深蓝的背景,白色的字体”显示的,效果如下图所示: 从上图中可以看出,用鼠标 ...

  4. POJ 3889 Fractal Streets(逼近模拟)

    $ POJ~3889~Fractal~Streets $(模拟) $ solution: $ 这是一道淳朴的模拟题,最近发现这种题目总是可以用逼近法,就再来练练手吧. 首先对于每个编号我们可以用逼近法 ...

  5. 一次Oday提权批量拿取商城服务器root权限

    此问题影响范围巨大,涉及到所有通过niushop开发的商城,希望通过这篇文章能够引起大家的重视.(注:演示的所用商城已经修复了此漏洞) 严重性:特级 解决方案:1.在用户访问漏洞页时对其身份进行判断: ...

  6. redis专题

    1.Linux安装redis 2.redis持久化 3.redis配置 4.SpringBoot整合Redis发布订阅 5.redis事务 5.1.redis事务介绍 5.2. redisTempla ...

  7. Python---字符串拼接和严格字符串

    BIF内建函数 Python3中提供了多少个内置函数     68 Python3中TUling tuling是不是一样的   严格区别大小 “=”和“==”的运用与区别 - ‘=‘ 是用来赋值的 - ...

  8. java源码生成可运行jar

    参考资料:https://blog.csdn.net/whatday/article/details/54767187 源码目录层级如下:

  9. web页面上传大文件有没有好的解决方案

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  10. Leetcode_132. Palindrome Partitioning II_[DP]

    题目链接 Given a string s, partition s such that every substring of the partition is a palindrome. Retur ...