一、Appium:
是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。 它使用WebDriver协议驱动iOS,Android和Windows应用程序;
UiAutomator测试框架是AndroidSDK自带的App UI自动化测试Java库;
appium在Android端基于WebDriver协议,利用Bootstrap.jar,最后通过调用UiAutomator的命令,实现App的自动化测试。
demo:https://github.com/vachelx/AutoTest

二、工作原理

1.Client端将自动化测试脚本发送给Service;
2.Server端与移动设备连接,将脚本解析后通过UiAutomator命令控制和监听移动设备;
3.appium针对主流语言分别开发的相应的appium库(Python Java PHP Ruby等),均已经集成在Server端,所以Service端可解析多种语言的测试脚本;
4.appium针对每种语言都开发了对应的Client,我们只需要选择想用的语言对应的Client。

三、Java + appium配置
1.安装appium服务端:
提供了可视化版本appium-desktop:
https://github.com/appium/appium-desktop/releases/tag/v1.18.3
安装后主页面Host和port使用默认的即可。

Edit Configurations中配置Android SDK和jdk对应的路径;然后可以启动Service

2.Server链接测试用移动设备:连上usb,预配置链接设备相关参数(cilent初始化需要和这些参数对应)

链接模拟器及相关信息获取:

(1440条消息) 【超详细】使用模拟器连接appium_曼 曼的博客-CSDN博客_appium连接模拟器https://blog.csdn.net/weixin_46457203/article/details/106223068
deviceName:adb devices -l 获取;
platformVersion:adb shell getprop ro.build.version.release 获取;
appPackage: 测试应用的包名
appActivity: 要测试的页面
(这里服务器地址要记住,在Client中需要)
启动会话后移动设备和server会连接上;(appium-desktop提供了录制功能直接操作移动设备生成脚本)

3.Client端配置
这里使用Android studio + java编译测试脚本
直接依赖java-client库https://github.com/appium/java-client即可
脚本运行可以借助junit4
(如若使用Python,需要安装Python3+Python3的appium库,最好再安装Python的IDE)

使用
新建空的Android项目-> 新建java library module;
项目build.gradle中添加:

allprojects {repositories {google()jcenter()//项目build.gradle的中添加maven { url "https://jitpack.io" }}
}

library module的build.gradle中添加依赖

apply plugin: 'java-library'dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'junit:junit:4.12'implementation 'androidx.test:runner:1.3.0'// 生成测试报告的extentreports库implementation group: 'com.aventstack', name: 'extentreports', version: '5.0.4'// java-clientimplementation 'com.github.appium:java-client:7.3.0'
}

接下来可以编写测试脚本了
脚本测试开始前需要配置与服务端的链接,拿到AndroidDriver以对移动设备进行指定操作;
需要在Junit合适的地方进行该初始化操作(和上面的服务端预配置参数一致)

  public AndroidDriver initDriver() {DesiredCapabilities desiredCapabilities = new DesiredCapabilities();desiredCapabilities.setCapability("platformName", "Android");desiredCapabilities.setCapability("appPackage", "com.tencent.mm");desiredCapabilities.setCapability("deviceName", "V1838A");desiredCapabilities.setCapability("platformVersion", "10");desiredCapabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI");desiredCapabilities.setCapability("resetKeyboard", true);desiredCapabilities.setCapability("noReset", true);desiredCapabilities.setCapability("automationName", "UiAutomator2");desiredCapabilities.setCapability("ensureWebviewsHavePages", true);
// 这里Url为服务端url driver即为服务端链接的移动设备驱动者driver = new AndroidDriver(new URL(Config.REMOTE_URL), desiredCapabilities);return driver;}

demo:

public class JumpWXFriends{private AndroidDriver mDriver; // 测试手机的控制者private static ExtentReports mExtent;@BeforeClasspublic static void beforeClass(){ // 在类初始化前初始化报告生成器String reportPath = "reports/" + Util.getMarkDate() + "/" + Util.getMarkTime() + ".html";mExtent = new ExtentReports();ExtentSparkReporter spark = new ExtentSparkReporter(reportPath);spark.config().setOfflineMode(true);mExtent .attachReporter(spark);}// 监听每个@Test方法执行前后的额外操作->记录报告@Rulepublic TestWatcher eu = new ExtendWatcher(mExtent); // case开始前初始化与Service链连接@Beforepublic void setUp() throws MalformedURLException {// 上面的与服务器链接的初始化操作 mDriver = getDriver();}@Afterpublic void tearDown() {// testcase测试结束后关闭连接mDriver.quit();}@Testpublic void testJumpWXFriends(){ Util.waitActivity(MAIN_ACTIVITY, 30, mDriver);Util.sleep(1);
// 这个是Appium-desktop生成的脚本代码
// 从微信主页 - 发现 - 朋友圈 - 向下滑动一段MobileElement el1 = (MobileElement) mDriver.findElementByXPath("//android.widget.FrameLayout[@content-desc=\"当前所在页面,与的聊天\"]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout[3]/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.ImageView[1]");el1.click();MobileElement el2 = (MobileElement) mDriver.findElementByXPath("//android.widget.FrameLayout[@content-desc=\"当前所在页面,与的聊天\"]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/com.tencent.mm.ui.mogic.WxViewPager/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ListView/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout");el2.click();new TouchAction(mDriver).press(PointOption.point(1200, 787)).moveTo(PointOption.point(734, 271)).release().perform();}
}

Appium + java 实现Android app自动化测试相关推荐

  1. Linux下Appium+Python+headless移动APP自动化测试实战

    Linux下Appium+Python+Headless移动APP自动化测试实战 文章目录 Linux下Appium+Python+Headless移动APP自动化测试实战 1. 环境准备 1.1 安 ...

  2. android app自动化测试框架Appium资料整理

    by Ruiming.Lv 1   自动化测试 1.1    自动化测试简介 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.从广义上来讲,一切通过工具(程序)的方式来代替或辅助手工测试的 ...

  3. appium 如何调用 adb_带你了解可用于Android APP自动化测试的框架:Appium

    Appium是一个开源的测试自动化框架,可用于原生,混合和移动Web应用程序测试. 它使用WebDriver协议驱动iOS,Android和Windows应用程序.Appium类库封装了标准Selen ...

  4. android 获取控件 id 工具,如何使用appium desktop 获取Android APP 控件的id

    背景: 随着Android 版本的更新,你会发现我们之前用的最新的版本的Appium 1.5.3无法启动我们的 Android APP 在模拟器为7.0的设备上,所以我们有必要了解如何使用 appiu ...

  5. Android App自动化测试: OPEN-STF环境搭建

    前言 版权归作者所有,如有转发,请注明文章出处:https://xiaoduoduo.github.io/archives/ 背景 1. 测试是检验程序质量的保证,而自动化测试是提高测试效率的最好方式 ...

  6. appium java 点击事件_java – 无法使用Appium在Android中的权限对话框中单击“允许”按钮...

    我无法使用Appium Java在 Android的权限对话框中点击"拒绝"或"允许"按钮.在点击这些按钮之前,是否需要添加任何功能? 以下是代码: Desir ...

  7. Frida Hook Android App 进阶用法之 Java 运行时

    FridaHookAndroid 本文旨在覆盖使用 Frida 对 Android App 进行 hook 的绝大多数场景.文章提到的所有代码以及被测 App,详见:https://github.co ...

  8. 如何实现APP自动化测试?

    APP测试,尤其是APP的自动化测试,在软件测试工程师的面试中越来越会被问到了.为了更好的回答这个问题,我今天就给大家分享一下,如何进行APP的自动化测试. 一.为了实现Java+Appium+Jun ...

  9. python app自动化测试框架_appium+python,app自动化测试框架

    基于appium的app自动化测试框架 基于appium框架的app自动化测试 App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于we ...

最新文章

  1. AttributeError: ‘dict‘ object has no attribute ‘append‘
  2. 2019年十大数据与分析技术趋势
  3. plotly基于dataframe数据绘制股票蜡烛图(Candlestick)
  4. 为什么要低温保存_渔之歌科普课堂:冷冻食品为什么要规定零下18摄氏度冷藏?...
  5. SAP WM中阶之存储类型设置界面里的’Return Stock To Same Storage Bin’
  6. gridView 多余字符显示省略号...
  7. 开发日记-20190524 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  8. pureMVC介绍及学习
  9. C# 退出提示 事件提示两次问题
  10. C#调用C++编写的DLL函数各种参数传递问题
  11. [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组
  12. 【洛谷比赛】你的名字。
  13. mysql 空闲几分钟速度变慢,MYSQL 运作一小段时间后,速度变得奇慢。而CPU基本空闲状态...
  14. 不采取任何措施 盒盖_得了癌症如果不化疗能活多久?医生的答案很实在
  15. ajax应用_AJAX的应用
  16. 【java】Java运行时动态生成类几种方式
  17. 亲历2010中国移动开发者大会
  18. 鲲鹏920服务器支持docker,鲲鹏云服务器上安装Dockerdocker-compose
  19. 如何快速查找综述类论文
  20. 计算机系统盘怎么扩充,扩大c盘空间,小编教你如何扩大C盘空间

热门文章

  1. #include<stdlib.h>
  2. Failed to load Main-Class manifest attribute from
  3. 远程服务器多用户登录,Win2008 R2远程桌面多用户登陆的配置方法
  4. 如何查询网址的图片地址(下载瓦片地图用)
  5. MacOS提示“App已损坏你应该将它移到废纸篓”的多种解决方法
  6. Excel 2010打开两个窗口,可以分开拖动
  7. php 海关对接 进口商品_海关179对接联调-在线咨询-210112
  8. iOS端的UI设计文档
  9. python空间计量经济学_一文读懂空间计量经济学及stata操作
  10. 我的世界网易是java版吗,看完这篇彻底明白了