教你用Appium搭建Android自动化测试框架(详细教程)

如题,本文附有仓库地址以及代码,目录如下:

1.下载安装appium

2.配置并使用appium

3.配置工程

一、下载安装appium

下载appium-desktop的mac版本,我选择用1.17.1版本,最新的版本1.22.0,拆分一个桌面应用为两个桌面应用了,一个叫做Appium Server,另外一个叫做AppiumInspector。

下载链接:github.com/appium/appi…

UI Automator,google提供的自动化测试框架,appium集成了它。详细了解如下:developer.android.google.cn/training/te…

二、配置并食用appium

a.电脑配置好adb,jdk,sdk环境变量,打开appium应用。

Host和端口不需要修改,点击start后页面如下,点击箭头位置,配置app的信息。

b.开始配置appium

c.涉及到的adb命令

adb devices -l
adb shell dumpsys activity | grep "mResume"

Json的信息,要根据具体的手机和要测试的app的信息进行配置,第一个矩形框为appPackage的内容,第二个矩形框为appActivity的内容,输入如下命令获得需要的信息;

adb shell dumpsys activity | grep "mResume"

输入如下命令,获得矩形框的内容,填充Json中的deviceName选项

adb devices -l

d.点击了start session后,正式进入了appium的使用,代表配置成功了,界面如下:

三、配置工程

a.点击录制

b.生成UI自动化的脚本

点击1-》界面控件-》2-》3,从而复制3中的脚本

c.通过AS新建一个工程

如Java工程,在maven-resposity下载三个依赖的jar包,在新建模块的libs目录下拷入 commons-lang3-3.1.jar 、java-client-7.3.0.jar、selenium-server-standalone-3.141.59.jar这三个jar库,build.gradle中配置依赖junit和jar包。

新建一个app的文件夹,然后复制对应要测试的apk到这个目录下面,主义,对应的apk一定要是testonly设置为false了,否则会发生错误,同时,手机在测试前,先卸载掉已经安装的测试应用,避免安装不上去;

d.最后,编写测试代码,作为普通的控制台程序进行执行,代码如下:

 
package com.mobile.searchandclick;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;public class MyClass {private AndroidDriver<AndroidElement> driver;@Beforepublic void init() {File classpathRoot = new File(System.getProperty("user.dir"));// 获取apps文件,前面测试应用所存放的目录File appDir = new File(classpathRoot, "/app/");// 获取apk文件File app = new File(appDir, "app.apk");DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability("platformName","Android");// 系统平台版本capabilities.setCapability("platformVersion", "10");// 设备名,这里是模拟器的设备名capabilities.setCapability("deviceName", "ONEPLUS_A6000");capabilities.setCapability("app", app.getAbsolutePath());// 设置被测应用包名capabilities.setCapability("appPackage", "com.example.android.navigationsample");// app的入口启动activitycapabilities.setCapability("appActivity", ".MainActivity");// 连接appium启动相应apptry {driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);} catch (MalformedURLException e) {e.printStackTrace();}System.out.println("App is launched!");}
//    版权声明:本文为CSDN博主「鱼乐游溪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//    原文链接:https://blog.csdn.net/yjf611/article/details/104470449@Testpublic void sampleTest() throws InterruptedException {Thread.sleep(2000);MobileElement el2 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/play_btn");el2.click();Thread.sleep(2000);MobileElement el3 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/username_text");el3.sendKeys("haha");Thread.sleep(2000);MobileElement el4 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/email_text");el4.sendKeys("123@qq.com");Thread.sleep(2000);MobileElement el5 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/password_text");el5.sendKeys("111");Thread.sleep(2000);MobileElement el6 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/signup_btn");el6.click();Thread.sleep(2000);MobileElement el7 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/play_btn3");el7.click();Thread.sleep(2000);MobileElement el8 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/checkBox");el8.click();Thread.sleep(2000);MobileElement el9 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/play_btn4");el9.click();Thread.sleep(2000);MobileElement el10 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/play_btn3");el10.click();Thread.sleep(2000);MobileElement el11 = (MobileElement) driver.findElementById("com.example.android.navigationsample:id/checkBox3");el11.click();Thread.sleep(2000);driver.navigate().back();Thread.sleep(2000);driver.navigate().back();Thread.sleep(2000);driver.navigate().back();Thread.sleep(2000);System.out.println("App is done!");}@Afterpublic void end() throws InterruptedException{driver.quit();}
}

项目的仓库地址如下:https://gitee.com/Greny/Appium 

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484933.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.22作业

作业要求&#xff1a; 程序代码&#xff1a; #include<myhead.h>int num 520; pthread_mutex_t mutex;void* task1(void* arg) {pthread_mutex_lock(&mutex);num 1314;sleep(3);printf("task1:num %d\n", num);pthread_mutex_unlock(&mutex); }voi…

医药之链:基于Django的智能药品管理系统

框架 Python 3.7 django 3.2.13 Bootstrap&#xff08;前端&#xff09; sqlite&#xff08;数据库&#xff09;导包 pip install django3.2.13 pip install pandas pip install xlwt环境搭建 登录 zfx 123456

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消 前言一 、关于NotificationServiceExtension1. 创建2. 推送机制3. API 实例方法二、 APNS Push Payload2. 来电邀请2. 来电取消三、数据共享3. 配置共享域四 知识点就到这里,下面是主要代码4. 1 Notificati…

C++ 八数码问题理解 `IDA*` 算法原则:及时止损,缘尽即散

1.前言 八数码是典型的状态搜索案例。如字符串转换问题、密码锁问题都是状态搜索问题。 状态搜索问题指由一种状态转换到到最终状态&#xff0c;求解中间需要经过多少步转换&#xff0c;或者说最小需要转换多少步&#xff0c;或者说有多少种转换方案。本文和大家聊聊八数码问…

如何在Shopify 创建Mega Menu

在Shopify上创建Mega Menu可以通过以下步骤完成&#xff1a; 1. 选择适合的主题 首先&#xff0c;选择一个适合的主题&#xff0c;因为不是所有的Shopify主题都支持Mega Menu。确保选择一个具有自定义菜单功能的主题&#xff0c;或者您可以使用Shopify App Store中的应用程序来…

(十三)【Jmeter】线程(Threads(Users))之tearDown 线程组

简述 操作路径如下: 作用:在正式测试结束后执行清理操作,如关闭连接、释放资源等。配置:设置清理操作的采样器、执行顺序等参数。使用场景:确保在测试结束后应用程序恢复到正常状态,避免资源泄漏或对其他测试的影响。优点:提供清理操作,确保测试环境的整洁和可重复性…

mysql索引问题

今天在工作写项目的时候&#xff0c;突然发现很多地方没有加索引&#xff0c;然后我就去加了&#xff0c;查了不少资料&#xff0c;捡起来了不少东西&#xff0c;来简单聊一聊&#xff0c;工作中最重要的一个细节&#xff1a;索引 mysq的存储结构 首先要聊一聊mysql的存储模式…

Docker镜像和容器

1.Docker的架构和底层技术 Docker提供了一个开发、打包、运行APP&#xff08;应用application&#xff09;的平台把APP和底层infrastructure&#xff08;基础设备&#xff09;隔离开来 ApplicationDocker EngineInfrastructure(physical/virtual) 1.1Docker Engine组成 后台…

【前端素材】推荐优质后台管理系统GramOs平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

Imagewheel私人图床搭建结合内网穿透实现无公网IP远程访问教程

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

工具篇-- 定时任务quartz

文章目录 前言一、quartz 介绍:二、quartz 的简单使用:2.1 引入jar&#xff1a;2.2 定义任务&#xff1a; 三、quartz 核心组件:3.1 JobDetail&#xff1a;3.1.1 JobDetail介绍&#xff1a;3.1.2 JobDetail 和job 的关系&#xff1a; 3.2 trigger&#xff1a;3.2.1 trigger 介绍…

基于Spring Boot的安康旅游网站的设计与实现,计算机毕业设计(带源码+论文)

源码获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1760645517548793858