Android + Appium 自动化测试完整的环境配置及代码详解
环境的的搭建
参考大神博客:https://www.cnblogs.com/fnng/p/4540731.html
该博客有一套详细的入门教程,奈何时间有点久远有些东西不能用了,但是参考价值还是有滴。
1.安装各种SDK
jre必须1.8以上 AndroidSDK需要8.0以下的测试,8.0我测试还不行,环境变量如下图所示
Android的sdk怎么装我就懒得说了,基本安卓开发的电脑上都有了,安装参考传送门:http://www.testclass.net/appium/appium-base-sdk/
2.安装node.js
官网地址:https://nodejs.org/en/
官网也说了,8.11.4LTS相对用的人最多,开发追求的是稳定,所以我下载了这个版本
如果你不会安装可以找你们公司的H5开发工程师,vue.js 跟 react.js 这些流行的前端框架都有用node
装完成后的校验:cmd 输入npm回车
3.appiumForWindows 安装
下载地址:https://pan.baidu.com/s/1x8iA_tDCNwLIpOEUQ6BodQ 密码: 94ig
或者看传送门:http://www.testclass.net/appium/appium-base-server/
安装,完成后启动长这样:
安装完成后设置下环境变量,把appium的目录设置进去
然后检测安装是否成功:
特别说明下:只要检测不成功就是少了环境变量,一个一个检查对照一下很快就能弄好了
环境变量依次是:ANDROID_HOME JAVA_HOME ADB Emulator 需要说明的是ADB跟Emulator都在android_sdk中,Emulator是安卓模拟器,也需要把它所在的目录设置为环境变量:
设置好这些,检测通过了,那么恭喜你Appium测试的环境算是搭建完成了。
创建模拟器
其实费力去安装Android-sdk还不如安装一个Android studio 各种工具齐全,sdk也可以想下什么下什么,模拟器创建也很方便
这里我创建了两5.1的模拟器
需要说明的是:只有模拟器才会支持X86 正常情况下,应用市场的apk都不会去支持x86的,主要是为了减少apk包的大小【至于为啥会减少,你问你们安卓开发去】,那么我想用微信这个apk来测试就不能用x86的模拟器了,所以我创建了arm的模拟器
arm内核的模拟器才可以安装一般世面上的apk,这个时候我就把微信这apk给装进去了。
这里我遇到一个问题:我的模拟器网速那真TM慢,网上搜了一波,发现是DNS的问题【如果你也是这样,可以跟我一样启动模拟器】传送门:https://blog.csdn.net/z860368871/article/details/73285978/
模拟器的名字我shan上面的截图有了,例如:Tommy5 Tommy55 Tommy8 这些就是模拟器名称,启动的时候需要用命令启动模拟器,如果你网速正常,请跳过这段,正常启动模拟器即可。
定位控件
采用 uiautomatorviewer 定位控件,它是android-sdk自带的东西
如果你打开不了,说明你的jre还不是1.8,请设置好你的jre环境变量,必须是1.8
到此,控件就能正常定位了,你也可以参考传送门: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
代码编写使用的是 idea 2018,这东西网上一大把破解方法,自行那啥,推荐使用这东西毕竟是牌子货。
【如果真不会装,请找到你们公司的java后台开发,他们用的就是这东西】
配置说明:
此外,我简单封装了一个工具类,方便使用,写有注释,看一眼就能明白,这里不罗嗦了
右键,启动看下demo效果你应该就能明白了
下面献上 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://blog.csdn.net/u010381752/article/details/81874273
Android + Appium 自动化测试完整的环境配置及代码详解的更多相关文章
- java环境配置及原理详解
java环境配置及原理详解 1.java跨平台的本质 我们谈到java,总是提到跨平台这个词.那么java语言是怎么实现跨平台的呢? 我们编写的java代码不是直接让windows系统读取解析,而是在 ...
- NC-日志配置及代码详解
目录 一.日志文件输出说明 二.日志配置说明 2.1 配置文件路径 2.2 配置格式 2.2.1 参数说明 三.代码说明 四.自定义日志实例 实例1-新建日志类 实例2-直接在代码中使用日志输出 五. ...
- 万能密码的SQL注入漏洞其PHP环境搭建及代码详解+防御手段
目录 环境搭建 session会话 环境搭建代码 创建数据库脚本 登录界面html: 查询数据库是否为正确的账号密码php代码 连接数据库php代码: 注销登录代码(即关闭session会话) 登录成 ...
- Android Studio C/C++开发环境配置
Android Studio C/C++开发环境配置 我的开发环境 : Win 10 + android studio 1.5 一, 安装NDK 开发环境: 1. Settings -> ...
- android data binding jetpack I 环境配置 model-view 简单绑定
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- OpenVPN下载、安装、配置及使用详解
OpenVPN下载.安装.配置及使用详解 OpenVPN简介 OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件.使用OpenVPN可 ...
- 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...
- CentOS 6.3下Samba服务器的安装与配置方法(图文详解)
这篇文章主要介绍了CentOS 6.3下Samba服务器的安装与配置方法(图文详解),需要的朋友可以参考下 一.简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件, ...
- MYSQL服务器my.cnf配置文档详解
MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...
随机推荐
- 如何取消WIN7的共享密码
如何取消WIN7的共享密码 把你的Guest帐号的密码设为空.如何设置呢? 1.右键“计算机”-“管理”-“本地用户和组”-“用户”-右键帐号“Guest”-“设置密码”,然后直接点击确定,不予设置密 ...
- php 如何禁用eval() 函数实例详解
在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险并经常会出现一些问题,今天我们就一起来看看eval函数对数组的操作及php 如何禁用eval() 函数: <?php $ ...
- nginx 代理参数介绍
2)我们可以看到nginx文件夹内有一个conf文件夹,其中有好几个文件,其他先不管,我们打开nginx.conf,可以看到一段: 这段代码在server里面,相当于一个代理服务器,当然可以配置多个. ...
- cocos2dx中的内存管理方式
转载:http://www.cocoachina.com/bbs/read.php?tid=195219 今天看了一下cocos2dx的内存管理机制,有些地方不太好理解搞了挺长的时间,现在感觉自己理解 ...
- MSScriptControl详解(可实现在C#等语言中调用JAVASCRIPT代码)
ScriptControl接口 属性名称 类型 备注 AllowUI BOOL 检测是否允许运行用户的接口元素.如果为False,则诸如消息框之类的界面元素不可见. CodeObject Object ...
- R: 字符串处理包:stringr
本文摘自: http://blog.fens.me/r-stringr/ 1. stringr介绍 stringr包被定义为一致的.简单易用的字符串工具集.所有的函数和参数定义都具有一致性,比如,用 ...
- ZROI2018普转提day2t3
传送门 分析 考试的时候sb了......我们发现可以按照先序遍历将一棵树变成一个序列,而不需要删的数的数量便是最长上升子序列的长度,但是还有一个问题就是如果在5和7之间有3个空的位置就无法填入合法的 ...
- Pull项目失败
1.网速原因 2.提示邮箱失效. 邮箱失效:解决方案 File->Setting: 然后,要记得重启,IDEA. 然后,在终端输入:git branch -l 查看项目分支 这样,设置好了用户名 ...
- Eclipse遇坑记录
1.安装Ivy插件 插件地址:http://ant.apache.org/ivy/ivyde/download.cgi 在线安装提示成功,但是配置窗口并未显示Ivy相关配置,随后利用手动安装重启即可 ...
- jquery('tr','div')和jquery('tr,div')
jQuery('tr', 'div') 等价于 $('tr', 'div') 表示div里面寻找tr jQuery('tr, div') <=> $('tr, div') 表 ...