目录

 1. 小程序自动化方案

 1.1 小程序的基本构成

 1.2 原生组件定位之UiSelector

 1.2.1 原生组件定位之UiSelector

 1.2.2 web元素定位

 1.3 小程序自动化准备

 1.3.1 安装appium

 1.3.2 安装adb tools

 1.3.3 chromedriver.exe版本

 1.3.4 打开手机的开发者选项

 1.3.5 打开webview的debug模式

 1.3.6 关于context切换

 1.3.7 关于windowHandles

 1.3.8 常见的问题

 2. 微信小程序自动化

 2.1 开启微信webview debug模式

 2.2 开始你的自动化demo

 2.2.1 启动appium服务

 2.2.2 确认小程序的androidProcess参数

 2.2.3 爱奇艺视频小程序demo

 3. 百度小程序自动化

 3.1 安装百度智能小程序调试包

 3.2 确认androdProcess进程名

 3.3 百度小程序demo

 4. 小程序自动化库

 4.1 百度小程序接口

 4.2 微信小程序接口

 4.3 安卓常用操作接口Device

 4.4 命令行操作接口Command

 4.5 图像识别AirCv

1. 小程序自动化方案

  目前小程序自动化主要有以下三种方案:

  • Appium框架

  • 网易的airtest框架

  • 腾讯的Fast-AutoTest

  网易的Airtest在图像识别元素上做的很不错,但爱奇艺视频小程序固定的UI元素非常少,大部分都是视频封面图,应用自动化比较受限制。

  腾讯的FAT是腾讯测试团队刚开源的框架,粗略看了下代码,可能对腾讯自家的APP支持的比较好,比如微信、qq浏览器等,但如果要测试其他的小程序,比如百度/支付宝小程序,可能还需要一些修改源代码的成本,目前社区也不太活跃,对于其执行效率,宣传说是比Appium要高,但我暂时未写demo详细去对比,具体性能数据未知。

  最终还是选择了appium框架,再加Airtest图像识别功能辅助测试,appium社区相对来说活跃度较高,维护团队稳定。

1.1小程序的基本构成

  小程序融合了Native app和web-app的特性,属于混合型应用(Hybrid App)。以爱奇艺视频微信小程序为例,上面的TopActionBar和下边的Bottom Action Bar是属于原生的组件,而中间是由webview渲染的,属于web应用。

  对于安卓原生的UI组件,我们可以直接用UIAutomator查看元素属性,如下图所示

1.2原生组件和web元素定位

  1.2.1 原生组件定位之UiSelector

  UiSelector对于各种原生组件属性的匹配,有以下四种匹配关系:

  • 完全匹配

  • 包含匹配

  • 正则匹配

  • 起始匹配

  每个原生组件有很多属性,如resource-id、text、class、content-desc等,这些是比较常用的,还有如下属性

  appium中查找原生组件的方法可用findElementByAndroidUIAutomator,以下会省略该方法名,直接写UiSelector

driver.findElementByAndroidUIAutomator("new UiSelector().text(\"爱奇艺视频\")")

  • ID属性resource-id定位

//resourceId全匹配

new UiSelector().resourceId("com.baidu.searchbox.remotedebug:id/baidu_searchbox")

//正则匹配baidu_searchbox结尾

new UiSelector().resourceIdMatches(".*baidu_searchbox")

//包含匹配,包含SearchTextInput的组件

new UiSelector().resourceIdContains("SearchTextInput")

//起始匹配

new UiSelector().resourceIdStartsWith("com.baidu.searchbox.remotedebug")v

  • 文本属性text定位

//通过文本定位

driver.findElementByAndroidUIAutomator("new UiSelector().text(\"爱奇艺视频\")")

//正则匹配查找未登录或我的

new UiSelector().textMatches("未登录|我的")

new UiSelector().textMatches("爱奇艺.*")

//包含我的

new UiSelector().textContains("我的")

//以首开头

new UiSelector().textStartsWith("首")

//查找界面中文本为“微信红包”的第3个组件

new UiSelector().text("微信红包").instance(2);

  • 描述属性content-desc

//通过文本定位

driver.findElementByAndroidUIAutomator("new UiSelector().description(\"更多\")")

new UiSelector().descriptionMatches("更多\w+")

new UiSelector().descriptionContains("更多")

new UiSelector().descriptionStartsWith("更多")

  • 其他属性

//类名为android.widget.RelativeLayout,下标index为5的

new UiSelector().className("android.widget.RelativeLayout").index(5);

//包名为com.android.deskclock的第五个组件

new UiSelector().packageName("com.android.deskclock").instance(5)

//checkable属性为true的

new UiSelector().checkable(true);

new UiSelector().longClickable(true).index(4);

  • 节点关系复杂定位

  - 父:Parent

  - 子: Children

  - 同胞: Sibling

  - 先辈: Ancestor

  - 后代:Descendant

//childselector查找子类

new UiScrollable(new UiSelector().scrollable(true)

.childSelector(new UiSelector().text("Android")))

//formParent查找父类

new UiSelector().resourceId("com.baidu.searchbox.remotedebug:id/search_list")

.fromParent(new UiSelector().className("android.widget.LinearLayout").index(1));

  1.2.2 web元素定位

  文档较多,不列举

1.3小程序自动化准备

  JAVA: 1.8

  node js : 10.14.2

  adb: 1.0.40

  appium : 1.8.1

  1.3.1 安装appium

  • 安装node环境

$ node -v

v10.14.2

$ npm -v

6.4.1

  • 利用npm全局安装appium

npm install appium@1.8.1 -g

#安装需要一定时间,安装完成后

$ appium -v

1.8.1

  1.3.2 安装adb tools

$ adb --version

Android Debug Bridge version 1.0.40

Version 4986621

Installed as D:\Program Files\androidsdk\Android\Sdk\platform-tools\adb.exe

  1.3.3 chromedriver.exe版本

  appiumDriver切换webview context需要用到chromedriver,每个app使用的webview版本可能不同,所以需要不同版本的chromedriver与之对应。详见: 

http://appium.io/docs/cn/advanced-concepts/chromedriver/

  1.3.4 打开手机的开发者选项

  每个手机开启的方式不一样,自行搜索。

  小米手机需要打开开发者选项、安全模式、关闭miui优化

  开启后,通过命令adb devices验证,如果能发现设备说明开启成功

ceshi@DESKTOP-UE2D6JR F:\android-perf-recorder

> adb devices

List of devices attached

ce96dc1b        device

d24c3bcc        device

adb无法识别的问题排查

  确认数据线没问题

  按教程:

https://jingyan.baidu.com/article/ce09321b5b76642bff858f31.html

  还是不行的话,重新弄一个androidsdk吧。

  1.3.5 打开webview的debug模式

  要实现小程序的自动化,一个非常重要的步骤就是打开app webview的debug模式。但是app一般不会提供debug模式。验证debug模式是否开启,可以通过如下步骤:

  • 打开APP的小程序,数据线连接至电脑

  • PC打开chrome浏览器输入chrome://inspect

  • 找到小程序的webview,点击inspect,可看到小程序界面

  如果能看到小程序使用的webview,那么表明该webview的debug已开启

  1.3.6 关于context切换

  appium原本是设计为NATIVE_APP的自动化,为了支持混合应用或APP里的webv页面测试,所以有这一概念。默认拉起app后,进入的NATIVE_APP,一般还会有WEBVIEW_xxx可以查看当前所有的context,python版本:

driver=webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

driver.contexts

['NATIVE_APP', 'WEBVIEW_com.tencent.mm:tools', 'WEBVIEW_com.tencent.mm:toolsmp']

>>>driver.switch_to.context(u'WEBVIEW_com.tencent.mm:tools')

>>>driver.page_source

'

  1.3.7 关于windowHandles

  windowhandle可以看成是chrome里一个标签页,小程序每跳转一个新页面,会生成一个新的window handle,但driver并不会自动切换新的window,所以每次查找元素前,都需要手动切换到相应的window,否则会报no such element

  目前能想到的笨办法是,找一个能标识每个页面的唯一性元素,然后遍历每个页签,如果page_source有该元素,则切到该页签

>>>driver.window_handles

['CDwindow-56b52630-ffcc-4b1f-88cc-c26d4b5e10ed', 'CDwindow-3168289f-c448-4597-bf21-cf825fd29b5c', 'CDwindow-4a0d4647-27a5-4cfa-92a7-357ee6901c2a']

>>>driver.switch_to.window('CDwindow-3168289f-c448-4597-bf21-cf825fd29b5c')

>>>driver.current_window_handle

'CDwindow-3168289f-c448-4597-bf21-cf825fd29b5c'

>>>driver.title

'中国新说唱官方投票通道'

>>>driver.switch_to.window('CDwindow-4a0d4647-27a5-4cfa-92a7-357ee6901c2a')

>>>driver.title

''

>>>driver.switch_to_window('CDwindow-56b52630-ffcc-4b1f-88cc-c26d4b5e10ed')

>>>driver.title

'百度一下'

  1.3.8 常见的问题

  • 切换context一直卡住,appium报chrome not reachable

  确认webview的debug模式开启

  确认chrome://inspect可以看到小程序

  确认androidProcess正确

  微信小程序的话确认是从搜一搜入口进去

  查找appium的日志看报错

  • 查找元素时报no sucn element

  打印pageSource,看是否有相应元素

  打印出所有windowHandles,遍历所有看是否有相应元素

  如果没有,那就不是小程序的webview context,确认androidProcess是否正确

  • chrome version must be >xx

  chromedriver版本与小程序的webview版本不匹配

  解决:启动appium时指定--chromedriver-executable参数,或者将appium的默认chromedriver.exe版本替换

  • 微信点击搜一搜报错

  appium 1.8.1,java-client6.1.0

driver.findElementByAndroidUIAutomator("text(\"搜一搜\")").click()

  该行代码报

UiAutomator exited unexpectedly with code 4294967295

https://testerhome.com/topics/13496,

不是缺少

/data/local/tmp/AppiumBootstrap.jar

https://blog.csdn.net/Sily_Z/article/details/80584750,

重启手机也不是很好使

  看日志是堆栈溢出:[UIAUTO STDOUT] INSTRUMENTATION_RESULT: shortMsg=java.lang.StackOverflowError

改为用adb点击搜一搜也是一样的结果。

https://www.cnblogs.com/chongyou/p/5263198.html,说前面有程序没结束,所以手动清理了后台的微信进程。并设置微信不能一直保持后台运行。还是没解决。

  解决:换为uiautomator2版本。

  • uiautomator2一直提示安装uiautomator2.server和uiautomator2.server.test

  解决:小米手机的话,打开usb安装,并关闭miui优化

  或者修改uiautomator2-server源码:

  https://blog.csdn.net/hszxd479946/article/details/78900982

  • 点击报错:java.lang.StackOverflowError

java.lang.StackOverflowError: stack size 1037KB\n\tat android.util.SparseArray.get

  https://github.com/appium/appium/issues/10204

  • 想拉微信却拉起了chrome浏览器

  解决:加上以下配置

caps.setCapability(MobileCapabilityType.BROWSER_NAME,"");

  • uiautomator2报签名错误

java.lang.SecurityException: Permission Denial: starting instrumentation

ComponentInfo{io.appium.uiautomator2.server.test/androidx.test.runner.AndroidJUnitRunner}

from pid=19303, uid=19303 not allowed because package io.appium.uiautomator2.server.test

does not have a signature matching the target io.appium.uiautomator2.server

  原因是安装了不同的uiautomator版本,卸载原来的就行。

  解决:

https://stackoverflow.com/questions/3082780/java-lang-securityexception-permission-denial

adb uninstall io.appium.uiautomator2.server.test

……

点击阅读原文查看全文

推荐阅读

点击阅读☞Python3简易接口自动化测试框架设计与实现(上)

点击阅读☞浅析自动化测试中元素等待的理解

点击阅读☞如何并行运行你的自动化测试?

点击阅读☞自动化测试和手工测试结果汇总小实践

点击阅读☞3分钟带你入门接口自动化测试!

上文内容不用于商业目的,如涉及知识产权问题,请联系小编(021-64471599-8017)。

爱我请给我好看!

android小程序_测试大佬是如何进行百度/微信小程序自动化测试的?相关推荐

  1. 全云端万能小程序_万能门店全云端独立版微信小程序源码V4.0.10,全五端源码下载...

    独立版万能门店全端云小程序是一款可以一键生成全端小程序(微信小程序.百度小程序.支付宝小程序.抖音/头条小程序.QQ 小程序)的平台, 平台集成了分销商城.会员卡券.知识付费.商户平台.同城论坛等功能 ...

  2. java比较炫的小程序_推荐三款私藏多年的微信小程序

    [小程序] (文后有福利) 酷友们,大家好! 今天一次性给大家介绍三款实用的微信小程序吧.这三款微信小程序基本上可以卸掉对应的 APP 了. 同等功能下的 APP 和 微信小程序,当然会选择后者嘛,不 ...

  3. android 自定义Scrollview实现淘宝二层楼效果新版微信小程序下拉效果

    android 自定义Scrollview实现淘宝二层楼效果新版微信小程序下拉效果 由于最近一段时间真的是太忙了,没有顾上即使更新博客,还请粉丝们见谅,最近要实现这样一个效果,这个效果跟淘宝二层楼和新 ...

  4. python操作微信小程序云端数据库_微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序...

    微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序 浏览量:1120 时间:2020-04-06

  5. 微信小程序:全新强大的恋爱话术微信小程序源码土味情话视频号or自媒体操作项目

    你猜的不错,这就是一款恋爱话术小程序 该款小程序相对来说还是挺强大的 而且还融合了小编前段时间发布的一款土味情话在里面 这款小程序基本分段都是和外面几千块几百块的分段是一样的 如有分段是: 开场阶段丨 ...

  6. 微信小程序是什么?如何快速搭建一个微信小程序?

    目录 一.微信小程序是什么 二.安全管理 三.微信小程序的功能 四.快速开发一个微信小程序APP 1.集成即构实时音视频SDK 2.初始化SDK引擎 3.创建房间与登录房间 4.房主创建房间 5.推流 ...

  7. 小程序源码:最新wordpress黑金壁纸微信小程序 二开修复版源码下载支持流量主收益

    这是一款wordpress系统框架的壁纸小程序源码 相信很多人以前也有用过这类的壁纸小程序源码吧 现在给大家发的这一款是二开修复版的 和以前的安装方式差不多,支持流量主收益模式 介绍: WordPre ...

  8. 小程序源码:最新wordpress黑金壁纸微信小程序 二开修复版-多玩法安装简单

    这是一款wordpress系统框架的壁纸小程序源码 相信很多人以前也有用过这类的壁纸小程序源码吧 现在给大家发的这一款是二开修复版的 和以前的安装方式差不多,支持流量主收益模式 介绍: WordPre ...

  9. uni-app微信小程序生成自定义参数二维码,跳转小程序指定页面,获取参数;uni-app微信小程序获取二维码自定义参数;微信小程序生成动态参数二维码;uni-app微信小程序获取动态参数二维码;

    一.场景需求: 在小程序个人名片页面A页面,生成用户的个人名片二维码(该二维码携带用户的唯一标识id):微信扫一扫或长按图片识别这个二维码,可以跳转到小程序的B页面,并且在B页面拿到二维码上的唯一标识 ...

  10. 小程序php调用腾讯视频,如何用微信小程序来看腾讯视频?观看视频的办法

    软件安装:腾讯视频 腾讯视频于2016年底提出了全新的品牌理念--"不负好时光",以更加年轻化.更能引起用户情感共鸣的定位全新亮相,并展现了全新品牌标识.秉承"内容为王, ...

最新文章

  1. 万物互联、应用现代化、云原生新范式,华为云为数字化转型提供最优解
  2. JAVA MD5加密用户信息
  3. windows下matplotlib.pyplot图像中显示中文的方法
  4. L1-034 点赞 (20 分)—团体程序设计天梯赛
  5. 支持ie与FireFox的剪切板代码
  6. 小程序推广引导下载app的解决办法
  7. 各种未授权访问漏洞的复现与利用
  8. PHP通过身份证号码获取性别、出生日期、年龄等信息
  9. 定时 监控 shell 服务宕机自动重启,并发送短信通知
  10. 机房巨佬的随机名称生成器
  11. 计算机不能上网查找原因的步骤,电脑能连接上wifi但不能上网的原因_电脑能连接上wifi但不能上网的解决方法...
  12. Static Single Assignment(SSA)
  13. 学计算机买电脑显卡1605ti够吗,GTX1650和GTX1050Ti哪个好?GTX1050ti和GTX1650性能差距对比评测...
  14. boto3使用教程用法
  15. 新浪微博客户端开发之授权登录+获取微博列表
  16. 图论(九)有向图和网络
  17. 手机ppi排行测试软件,2018主流厂商旗舰手机屏幕测试数据汇总和子项排名统计...
  18. impdp 导入报错
  19. 第八章 STM32+SGP气体传感器+DHT11温湿度传感器+OLED模块显示室内温湿度、二氧化碳和甲醛浓度
  20. 办公室养龟有什么讲究,办公室养龟风水

热门文章

  1. 微信小程序给用户发红包
  2. 你还在为不知道怎么给家人庆祝生日而发愁吗?
  3. Python3 requests 12306查票模块
  4. android虚拟机工作模式,android虚拟机也能用命令行模式
  5. matlab误差分析,数值分析之MATLAB实验一误差分析
  6. python 3d绘图立方体_用python绘制三维立方体的二维投影
  7. EXCEL 如何删除重复值,并保留重复值的第一个选项
  8. HDU 6045 Is Derek lying? 水题
  9. 明捧中文暗贬中文编程——看《英文字母已成现代中文一部分,争论汉字编程还是英文编程已无意义》
  10. 尚硅谷java学习笔记第五天(数组上)