百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

安卓 Android 自动化傻瓜式教程-java版(appium)(安卓有自动化app吗)

toyiye 2024-04-04 11:35 20 浏览 0 评论

还在说你不会安卓自动化,看了这篇文章,你就能迅速掌握appium的自动化了

不要感觉环境依赖安装麻烦,这些早晚你都是需要安装失业的,顺着文档挨个执行,你肯定能成功,时间最多1d,快的话半天

1、依赖基础环境安装准备

  • Java JDK安装,环境变量配置
  • Android SDK安装,环境变量配置
  • Node js 安装(appium组件依赖node js完成脚本解析)
  • Appium Desktop 安装
  • 安卓模拟器安装(夜神模拟器)

2、Java开发工具安装

  • idea安装
  • maven安装

3、Demo开发测试

  • 夜神模拟器安装有道计算器
  • 开发自动化代码测试

下面是具体安装过程,有安装的可以略过直接往后看

1.1 Java JDK安装,环境变量配置

搜索进入官网,Oracle,按照指示下载(版本推荐JDK8)

一般都都选择64位

https://www.oracle.com/java/technologies/downloads/#java8-windows

Java SDK安装

  • 下载后直接双击安装



  • 添加环境变量,按 windows + R键,输入:sysdm.cpl

然后点击确认


  • 将路径更换为自己java安装路径

JAVA_HOME

D:/***/jdk1.8.0_144



新建再CLASSPATH,注意前面的逗号和分号不能丢掉

CLASSPATH

.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

找到path环境变量,点击新建

%JAVA_HOME%\bin

%JAVA_HOME%\jre\bin

验证是否成功,win+R 输入cmd,然后输入 java -version 验证java环境是否安装成功

显示以下内容表明安装成功

1.2、Android SDK安装,环境变量配置

下载链接:https://www.androiddevtools.cn/

可以下载zip或者exe(exe安装时,记住安装路径)

安装完后,进入安装路径,打开这个SDK Manager

勾选

一般根据默认推荐安装即可。

如果自选,必选项:

Android SDK Tools:基础工具包,版本号带rc字样的是预览版

Android SDK Platform-tools:从android2.3开始划出此目录,存放公用开发工具,比如adb、sqlite3等,被划分到了这里

Android SDK Build-tools:Android项目构建工具

SDK Platform:对应平台的开发工具,需要下载Android xxx(API xx)的版本里面已经包含了

Android xxx(API xx) :可选的各平台开发工具,一般选择最新版本即可



Extras目录:

Android Support Repository:主要是方便在gradle中使用Android Support Libraries,因为Google并没有把这些库发布到maven center或者jcenter去,而是使用了Google自己的maven仓库

Google Web Driver:被测APP里有用到H5的话就需要勾选,

Intel x86 Emulator Accelerator(HAXM installer):windows平台的Intel x86模拟器加速工具,配合Intel x86 atom/atom_64 System Image使用可加快模拟器的运行速度

下面是我的安装勾选效果

勾选后点击安装




接着配置Android SDK环境变量

  • ANDROID_HOME 设置,变量名:ANDROID_HOME。变量值:sdk安装路径。

  • Path 设置,同样在环境变量页面,系统变量中,找到Path,分别添加tools安装路径、platform-tools安装路径、Android新版API安装路径,均在SDK目录下。




  • 验证安装是否成功,在cmd中输入adb,验证sdk是否安装配置成功。 出现图示为安装成功


1.3、node js安装

前往 https://mp.toutiao.com/profile_v4/graphic/publish , 下载然后安装


安装完后,检测版本(我这个是安装了多个版本的node,安装了nvm)


1.4、appium desktop安装

  • 从github安装,https://github.com/appium/appium-desktop/releases


  • 或者从 https://pan.baidu.com/s/1jGvAISu#list/path=%2F 网盘获取,我下载的是1.7.1版本

  • 然后确认安装路径无误后,保存

1.5、安卓模拟器安装

  • 模拟器安装

前往 https://www.yeshen.com,下载最新版本,直接安装即可

安装完成后,前往 https://m.amtc.cn/rj_list/100230.html 下载一个 有道计算器,

然后直接让apk的计算器安装包拖进夜神模拟器,直到计算器安装完成


  • 模拟器adb版本替换为Android SDK adb 版本

把Android SDK目录下\platform-tools的adb.exe拷贝到Nox\bin目录(夜神模拟器的安装目录),然后删除当前目录下的nox_adb.exe,再将拷贝过来的adb.exe改名为nox_adb.exe


2、Java开发工具安装

2.1 idea安装,

https://www.jetbrains.com/idea/

2.2 maven安装

https://maven.apache.org/download.cgi


下面是具体Demo开发过程


3、Demo开发测试

  • 新建maven项目

新建工程后,新建AppiumTestDemo类

package app;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;

public class AppiumTestDemo {
    private AppiumDriver appiumDriver;

    public static AndroidDriver<MobileElement> androidDriver;
    public static AppiumDriverLocalService service;

    @BeforeClass
    public void setup() throws Exception {

        // 手动启动appium service
        connectDirect();
        // 通过代码启动appium service
//        startAppiumWhenConect();

    }

    private static void startAppiumWhenConect() {
        service = AppiumDriverLocalService.buildDefaultService();
        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("platformName", "Android");
        cap.setCapability("deviceName", "127.0.0.1:62001");
        cap.setCapability("platformVersion", "7.1.2");
        cap.setCapability("appPackage", "com.youdao.calculator");
        cap.setCapability("appActivity", "com.youdao.calculator.activities.MainActivity");

        System.out.println("DesiredCapabilities_init");
        service.start();
        System.out.println("DesiredCapabilities_init_done");

        androidDriver = new AndroidDriver(service, cap);
    }

    private void connectDirect() throws MalformedURLException {

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(CapabilityType.BROWSER_NAME, "");
        cap.setCapability("platformName", "Android"); //指定测试平台
        cap.setCapability("deviceName", "127.0.0.1:62001"); //指定测试机的ID,通过adb命令`adb devices`获取
        cap.setCapability("platformVersion", "7.1.2");

        //将上面获取到的包名和Activity名设置为值
        cap.setCapability("appPackage", "com.youdao.calculator");
        cap.setCapability("appActivity", "com.youdao.calculator.activities.MainActivity");

//        //A new session could not be created的解决方法
//        cap.setCapability("appWaitActivity", "com.meizu.flyme.calculator.Calculator");
//        //每次启动时覆盖session,否则第二次后运行会报错不能新建session
//        cap.setCapability("sessionOverride", true);
        appiumDriver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), cap);
    }


    @Test
    public void plus_youdao() throws Exception {
        Thread.sleep(3000);
        int width = appiumDriver.manage().window().getSize().width;
        int height = appiumDriver.manage().window().getSize().height;
        int x0 = (int) (width * 0.8);  // 起始x坐标
        int x1 = (int) (height * 0.2);  // 终止x坐标
        int y = (int) (height * 0.5);  // y坐标
        // 左滑4次
        for (int i = 0; i < 4; i++) {
            appiumDriver.swipe(x0, y, x1, y, 500);
            Thread.sleep(1000);
        }

        // 新手规则
        appiumDriver.findElementById("com.youdao.calculator:id/guide_button").click();
        // 增加线程休眠,避免后续的webView获取不到数据
        Thread.sleep(1000);
        for (int i = 0; i < 6; i++) {
            appiumDriver.findElementByXPath("//android.webkit.WebView[@text='Mathbot Editor']").click();
            Thread.sleep(1000);
        }

        String btn_xpath = "//*[@resource-id='com.youdao.calculator:id/view_pager_keyboard']/android.widget.GridView/android.widget.FrameLayout[%d]/android.widget.FrameLayout";
        // 123 * 8
        appiumDriver.findElementByXPath(String.format(btn_xpath, 17)).click();
        appiumDriver.findElementByXPath(String.format(btn_xpath, 18)).click();
        appiumDriver.findElementByXPath(String.format(btn_xpath, 19)).click();
        // *
        appiumDriver.findElementByXPath(String.format(btn_xpath, 10)).click();
        // 111
        appiumDriver.findElementByXPath(String.format(btn_xpath, 17)).click();
        appiumDriver.findElementByXPath(String.format(btn_xpath, 17)).click();
        appiumDriver.findElementByXPath(String.format(btn_xpath, 17)).click();
        // -
        appiumDriver.findElementByXPath(String.format(btn_xpath, 15)).click();
        appiumDriver.findElementByXPath(String.format(btn_xpath, 8)).click();
        Thread.sleep(3000);


    }

    @AfterClass
    public void tearDown() throws Exception {

        appiumDriver.quit();

    }
}

根据代码提示添加依赖包,或者手动添加

<dependencies>
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.2</version>
        </dependency>
    </dependencies>


  • 启动appium服务,如下,配置host后,点击启动


如下图,表示服务启动成功

  • 启动Java代码,运行安卓模拟器里面的计算器进行计算,点击test




  • 运行效果



相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码