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里面的东西是否也可以定位?搜了一波,发现有两方法理论上可行,但我感觉还是有点局限吧,这里不展开了,大家可以自行百度。

###################

#coding=UTF-8‘‘‘Create on 2018-4-16python 2.7 for mac@author: 张刚强

https://www.cnblogs.com/tangdongchu/p/4432808.html

vi ~/.bash_profileexport ANDROID_HOME=/Users/zgq/Library/Android/sdkadb devicesadb shell ps|grep baoxian1. adb shell2. dumpsys activity | grep mFocusedActivity

/Users/zgq/Library/Android/sdk/tools

sudo sh /Users/zgq/Library/Android/sdk/tools/bin/uiautomatorviewer ##启动uiautomator view程序

apk--bxd_6.2.4_online_624_3_sign.apk/Users/zgq/PycharmProjects/appium_android/com.test/bxd_6.2.4_online_624_3_sign.apkadb install XXX.apk

通过反编译来获取包名及入口cd /Users/zgq/Library/Android/sdk/aapt dump badging c:\software\taobao.apkaapt dump badging

appium 启动--127.0.0.1--4723‘‘‘import osimport unittestfrom selenium import webdriverfrom appium import webdriverimport time

#Appium环境配置PATH = lambda p: os.path.abspath(    os.path.join(os.path.dirname(__file__), p))

class DpAppTests(unittest.TestCase):    def setUp(self):        desired_caps = {}        desired_caps[‘platformName‘] = ‘Android‘ #设置平台        desired_caps[‘platformVersion‘] = ‘6.0‘ #系统版本        desired_caps[‘deviceName‘] = ‘7L9PQKCEUKSO6HBY‘ #设备id        desired_caps[‘autoLaunch‘] = ‘true‘ #是否自动启动        desired_caps[‘app‘] = PATH(            ‘/Users/zgq/PycharmProjects/appium_android/com.test/bxd_6.2.4_online_624_3_sign.apk‘ #安装包路径,放在该py文件的目录下        )        desired_caps[‘appPackage‘] = ‘com.jiuyang.baoxian‘ #包名 com.jiuyang.baoxian        desired_caps[‘appActivity‘] = ‘com.jiuyang.baoxian.activity.MainActivity‘ #启动的activity com.jiuyang.baoxian/.activity.MainActivity

# com.jiuyang.baoxian/.activity.WelcomeActivity#Original error: Activity used to start app doesn‘t exist or cannot be launched! Make sure it exists and is a launchable activity

#与appium-server通信的协议        self.driver = webdriver.Remote(‘http://localhost:4723/wd/hub‘, desired_caps)

def tearDown(self):        self.driver.quit() #case执行完退出

def test_dpApp(self): #需要执行的case        time.sleep(15)        #com.jiuyang.baoxian:id/name 在线咨询     android.widget.TextView        el = self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘在线咨询‘)]") #通过xpath找到定位框        #el = self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘上海‘)]") #通过xpath找到定位框        el.click() #点击定位框        time.sleep(5)

#android.widget.EditText  com.jiuyang.baoxian:id/login_phone_et

#self.driver.find_element_by_id("com.jiuyang.baoxian:id/login_phone_et").click()        #InputBox = self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘请输入您的手机号码‘)]") #通过xpath找到定位框        #InputBox = self.driver.find_element_by_xpath("//android.widget.EditText[contains(@text,‘输入手机号码‘)]") #通过xpath找到定位框        #InputBox = self.driver.find_element_by_id("com.jiuyang.baoxian:id/login_phone_et")        #InputBox.click()  # 点击定位框        time.sleep(2)

#InputBox.send_keys("18103835542")        time.sleep(2)

if __name__ == ‘__main__‘:    suite = unittest.TestLoader().loadTestsFromTestCase(DpAppTests)    unittest.TextTestRunner(verbosity=2).run(suite) #执行case集

###########################
---------------------
作者:s清风s
来源:CSDN
原文:https://blog.csdn.net/u010381752/article/details/81874273
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/zgq123456/p/9986296.html

时间: 2024-10-24 11:22:40

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

java环境配置及原理详解

java环境配置及原理详解 1.java跨平台的本质 我们谈到java,总是提到跨平台这个词.那么java语言是怎么实现跨平台的呢? 我们编写的java代码不是直接让windows系统读取解析,而是在windows系统中装上java虚拟机(JVM)来读取编写的java软件所以跨平台的实现原理就是在对应平台上装上相应平台能够识别的java虚拟机,用这JVM来读取解析编写的java软件所以java程序是跨平台的,但是JVM不是跨平台的 2.jre和jdk的区别 jre: java的运行环境(包括JV

Android应用开发(一):Android平台搭建与开发环境配置

本文从自身经历的角度分享了Android应用开发的第一步,即Android平台搭建与开发环境配置,主要包括平台的选择与安装及其安装过程中经常遇到的问题,最后给出一个实例,即第一个Android软件"Hello World!". 1.Android Studio软件下载 可以在百度上直接下载Android Studio,或者到官网www.android.com上直接下载(中国大陆资源可能会受限). 注意:这里推荐使用Android Studio,并不推荐使用Eclipse或者IDEA开发

【10.2.3】ArcGIS Runtime for Android搭建开发环境过程中问题详解

一.Visual Studio Ultimate2012安装过程问题 1.问题描述 安装完成后,您将看到一条消息,指示安装程序已完成,但并不是所有的功能具有已正确安装,以及以下警告消息: Microsoft Web Deploy 3.0 所需的证书不在有效期内根据当前系统时钟或签名文件中的时间戳验证时. 2.解决方案 修改电脑系统时间为2013年7月,断网后重新安装,成功后再联网. Visual Studio Ultimate2012激活密钥:RBCXF-CVBGR-382MK-DFHJ4-C6

appium简明教程(7)——Desired Capabilities详解

Desired Capabilities在启动session的时候是必须提供的. Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情: 本次测试是启动浏览器还是启动移动设备? 是启动andorid还是启动ios? 启动android时,app的package是什么? 启动android时,app的activity是什么? Appium的Desired Capabilities是扩展了webdriver的Desired Capab

redis.conf 配置文档详解

redis 配置文档详解. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411

Android基础入门教程——8.3.16 Canvas API详解(Part 1)

Android基础入门教程--8.3.16 Canvas API详解(Part 1) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们花了13小节详细地讲解了Android中Paint类大部分常用的API,本节开始我们来讲解 Canvas(画板)的一些常用API,我们在Android基础入门教程--8.3.1 三个绘图工具类详解 中已经列出了我们可供调用的一些方法,我们分下类: drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前

MySql绿色版配置及使用详解

最近在做项目开发时用到了MySql数据库,在看了一些有关MySql的文章后,很快就上手使用了.在使用的过程中还是出现了一些问题,因为使用的是绿色免安装版的MySql所以在配置的时候出现了一些问题,该篇文章就主要针对MySql绿色版的配置及其使用进行讨论. 一.MySql概述 MySql数据库是有瑞典MySql AB公司开发,现在该公司被Oracle收购属于Oracle所有.同SQL Server类似,它也是基于关系型数据库的数据库管理系统,在Web应用方面MySQL是最好的RDBMS之一,因为它

webpack安装配置使用教程详解

webpack安装配置使用教程详解 www.111cn.net 更新:2015-09-01 编辑:swteen 来源:转载 本文章来为各位详细的介绍一下关于webpack安装配置使用教程吧,这篇文章对于不喜欢使用 jspm测试的朋友可以参考一下. webpack 入门 目录 1 安装 webpack2 初始化项目3 webpack 配置4 自动刷新5 第三方库6 模块化7 打包.构建8 webpack 模板我最近大量使用的是 jspm,但因为用它搭建的前端开发环境中,写测试代码非常困难,而项目又

java开源框架SpringSide3多数据源配置的方法详解

原创整理不易,转载请注明出处:java开源框架SpringSide3多数据源配置的方法详解 代码下载地址:http://www.zuidaima.com/share/1781579130801152.htm 在SpringSide 3社区中,不断有人提出多数据源配置的问题,但是时至今日却一直没有一个完美的答案.经过一个星期的折腾,我总算搞清楚了在SpringSide 3中配置多数据源的各种困难并加以解决,在这里,特地把我配置SpringSide 3项目中多数据源的过程写出来,与大家分享. 我使用