Android + Appium 自动化测试完整的环境配置及代码详解

Android + Appium 自动化测试完整的环境配置及代码详解环境的的搭建参考大神博客:https://www.cnblogs.com/fnng/p/4540731.html该博客有一套详细的入门教程,奈何时间有点久远有些东西不能用了,但是参考价值还是有滴。1.安装各种SDKjre必须1.8以上AndroidSDK需要8.0以下的测试,8.0我测试还不行,环境变量如下图所示…

大家好,又见面了,我是你们的朋友全栈君。

环境的搭建

参考大神博客:https://www.cnblogs.com/fnng/p/4540731.html

该博客有一套详细的入门教程,奈何时间有点久远有些东西不能用了,但是参考价值还是有滴。

1.安装各种SDK

jre必须1.8以上  AndroidSDK需要8.0以下的测试,8.0我测试还不行,环境变量如下图所示

Android + Appium 自动化测试完整的环境配置及代码详解

Android + Appium 自动化测试完整的环境配置及代码详解

Android的sdk怎么装我就懒得说了,基本安卓开发的电脑上都有了,安装参考传送门:http://www.testclass.net/appium/appium-base-sdk/

2.安装node.js

官网地址:https://nodejs.org/en/

Android + Appium 自动化测试完整的环境配置及代码详解

官网也说了,8.11.4LTS相对用的人最多,开发追求的是稳定,所以我下载了这个版本

如果你不会安装可以找你们公司的H5开发工程师,vue.js 跟 react.js 这些流行的前端框架都有用node

装完成后的校验:cmd 输入npm回车 

Android + Appium 自动化测试完整的环境配置及代码详解

3.appiumForWindows 安装

下载地址:https://pan.baidu.com/s/1x8iA_tDCNwLIpOEUQ6BodQ   密码: 94ig

或者看传送门:http://www.testclass.net/appium/appium-base-server/

安装,完成后启动长这样:

Android + Appium 自动化测试完整的环境配置及代码详解

安装完成后设置下环境变量,把appium的目录设置进去

然后检测安装是否成功:

Android + Appium 自动化测试完整的环境配置及代码详解

特别说明下:只要检测不成功就是少了环境变量,一个一个检查对照一下很快就能弄好了

环境变量依次是:ANDROID_HOME   JAVA_HOME   ADB  Emulator   需要说明的是ADB跟Emulator都在android_sdk中,Emulator是安卓模拟器,也需要把它所在的目录设置为环境变量:

Android + Appium 自动化测试完整的环境配置及代码详解

Android + Appium 自动化测试完整的环境配置及代码详解

设置好这些,检测通过了,那么恭喜你Appium测试的环境算是搭建完成了。

创建模拟器

Android + Appium 自动化测试完整的环境配置及代码详解

其实费力去安装Android-sdk还不如安装一个Android studio 各种工具齐全,sdk也可以想下什么下什么,模拟器创建也很方便

这里我创建了两5.1的模拟器

需要说明的是:只有模拟器才会支持X86 正常情况下,应用市场的apk都不会去支持x86的,主要是为了减少apk包的大小【至于为啥会减少,你问你们安卓开发去】,那么我想用微信这个apk来测试就不能用x86的模拟器了,所以我创建了arm的模拟器

Android + Appium 自动化测试完整的环境配置及代码详解

arm内核的模拟器才可以安装一般世面上的apk,这个时候我就把微信这apk给装进去了。

这里我遇到一个问题:我的模拟器网速那真TM慢,网上搜了一波,发现是DNS的问题【如果你也是这样,可以跟我一样启动模拟器】传送门:https://blog.csdn.net/z860368871/article/details/73285978/

模拟器的名字我shan上面的截图有了,例如:Tommy5 Tommy55 Tommy8  这些就是模拟器名称,启动的时候需要用命令启动模拟器,如果你网速正常,请跳过这段,正常启动模拟器即可。

定位控件

采用 uiautomatorviewer 定位控件,它是android-sdk自带的东西

Android + Appium 自动化测试完整的环境配置及代码详解

如果你打开不了,说明你的jre还不是1.8,请设置好你的jre环境变量,必须是1.8

Android + Appium 自动化测试完整的环境配置及代码详解

到此,控件就能正常定位了,你也可以参考传送门:http://www.testclass.net/appium/appium-base-find-element/

编写测试脚本代码

这里我用的是java语言哈

源码下载地址:https://download.csdn.net/download/u010381752/10615814

首先下载两jar包,我源码里面有了 java-client 跟 selenium-server-standalone 这两jar就是用于测试的主要工具了

启动Appium-server

Android + Appium 自动化测试完整的环境配置及代码详解

代码编写使用的是 idea 2018,这东西网上一大把激活成功教程方法,自行那啥,推荐使用这东西毕竟是牌子货。

【如果真不会装,请找到你们公司的java后台开发,他们用的就是这东西】

Android + Appium 自动化测试完整的环境配置及代码详解

配置说明:

Android + Appium 自动化测试完整的环境配置及代码详解

此外,我简单封装了一个工具类,方便使用,写有注释,看一眼就能明白,这里不罗嗦了

右键,启动看下demo效果你应该就能明白了

Android + Appium 自动化测试完整的环境配置及代码详解

下面献上 appium 测试使用的API:

模拟操作类

  • driver.runAppInBackground(5); //将当前活跃的应用放在后台运行
  • driver.hideKeyboard(); //隐藏键盘
  • driver.lockDevice(); //锁屏
  • driver.openNotifications(); //打开Android的下拉通知栏
  • driver.isAppInstalled(“com.example.android.apis”) //判断应用是否安装
  • driver.installApp(“path/to/my.apk”) //安装应用
  • driver.removeApp(“com.example.android.apis”) //卸载应用
  • driver.closeApp() //关闭App
  • driver.getContextHandles() //可用上下文,context可以理解为可进入的窗口,如果是native则为native_app,如果是webview为对应webview;
  • driver.context(); //设置上下文 (context),对hybrid app会用到
  • driver.getAppStringMap(); //获取应用的字符串
  • driver.pressKeyCode(AndroidKeyCode.HOME); //给设备发送一个按键事件,所有键盘按键值可参考AndroidKeyCode类
  • driver.pullFile(“Library/AddressBook/AddressBook.sqlitedb”); //从设备中拉出文件
  • driver.pullFolder(“Library/AddressBook”); //从设备中拉出文件夹
  • driver.PushFile(“/data/local/tmp/file.txt”, “some data for the file”); //推送文件到设备中去
  • driver.swipe(75, 500, 75, 0, 0.8) //模拟用户滑动
  • driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1)); //设置等待时间
  • driver.navigate().forward(); // 前进
  • driver.navigate().back(); // 后退
  • driver.navigate().refresh(); // 刷新
  • driver.currentActivity(); //当前activity,可用于断言跳转是否正确
  • driver.startActivity(appPackage,appActivity); //启动其他app的activity
  • 坐标操作,降低适配带来的不适用: 
    double Screen_X = driver.Manage().Window.Size.Width;//获取手机屏幕宽度 
    double Screen_Y = driver.Manage().Window.Size.Height;//获取手机屏幕高度 
    double startX = element.Location.X; //获取元素的起点坐标,即元素最左上角点的横坐标 
    double startY = element.Location.Y; //获取元素的起点坐标,即元素最左上角点的纵坐标 
    double elementWidth = element.Size.Width; //获取元素的宽度 
    double elementHight = element.Size.Height; //获取元素的宽度

传送门:https://blog.csdn.net/mmk1992/article/details/56016528

经测试上面这些方法,有些不支持高版本了,比如说滑动就不支持了swipe

这里还有一个遗留问题:H5-WebView里面的东西是否也可以定位?搜了一波,发现有两方法理论上可行,但我感觉还是有点局限吧,这里不展开了,大家可以自行百度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161179.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 对Java线程池ThreadPoolExecutor的理解分析

    对Java线程池ThreadPoolExecutor的理解分析主要放在后面做总结(重点查看下:http://www.ideabuffer.cn/,刚发现一个宝藏)参考文献:1.http://www.ideabuffer.cn/2017/04/04/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Java%E7%BA%BF%E7%A8%8B%E6%B1%A0%EF%BC%9AThreadPoolExecutor/2.https://tech.meituan.com/2020/04/02/java-pooling-pratice-i

    2022年7月12日
    16
  • navicat for mysql 15 激活码【在线注册码/序列号/破解码】[通俗易懂]

    navicat for mysql 15 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    67
  • Linux学习——shell编程之正则表达式和字符处理命令

    shell编程之正则表达式一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分隔、匹配、查找及替换操作。2 shell编程之正则表达式与通配符 正则表达式:用于在文件中匹配符合条件的字符串。正则是包含匹配。grep 、awk 、sed等命令支持正则表达式。 通配符:用于匹配符合条件的文件名,通配符是完全匹配。ls、f

    2022年2月26日
    47
  • 评日报文章:关于华为裁员

    评日报文章:关于华为裁员今天看了一篇日报:CSDN日报20170304——《令人比较失落的IT圈子-关于华为裁员》看了前半部分,就没有往下看了。讲的有所道理,但是总觉得文字中似乎有种怨念,不够通透,明亮。就说一个我比较关心的观点吧:IT门槛低,不如物理,化学,生物制药这类学科。部分承认,但是综合考虑社会发展状况,这是很容易看明白的一个现象,文章前半部分都已经说了,和国家大力扩招,培养发展计算机产业是有很大关系的。社会发展到

    2022年7月18日
    28
  • swing58_ML2437A

    swing58_ML2437A给定一个长度为 n 的整数序列,初始时序列为 {1,2,…,n−1,n}。序列中的位置从左到右依次标号为 1∼n。我们用 [l,r] 来表示从位置 l 到位置 r 之间(包括两端点)的所有数字构成的子序列。现在要对该序列进行 m 次操作,每次操作选定一个子序列 [l,r],并将该子序列中的所有数字进行翻转。例如,对于现有序列 1 3 2 4 6 5 7,如果某次操作选定翻转子序列为 [3,6],那么经过这次操作后序列变为 1 3 5 6 4 2 7。请你求出经过 m 次操作后的序列。输入格式第

    2022年8月10日
    4
  • Opencv cvCircle()函数[通俗易懂]

    Opencv cvCircle()函数[通俗易懂]Circle,即圆形。cvCircle是指绘制圆形的一个程序函数。

    2022年7月24日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号