环境搭建:

  • Node.js
  • Android SDK
  • JDK
  • 安卓模拟器
  • appium-desktop
  • Maven
  • IDE - Intellij

开始搭建吧!

  1. 安装Node.js(Appium是使用Node.js平台编写的“HTTP服务器” ,使用Webdriver JSON有线协议驱动iOS和Android会话。因此,在初始化Appium Server之前,必须在系统上预安装Node.js)。安装版本:v10.15.1 地址:https://nodejs.org/download/release/, 选择node-v10.15.1-x64.msi 版本
    验证是否已经安装成功,在dos界面输入命令:node -v, 如图:
  2. Java自动化安卓测试脚本 appium+java自动化测试框架_Android

  3. 下载Android SDK (这里也可以直接下载android studio),下载地址:http://tools.android-studio.org/index.php/sdk , 下载.exe文件后,一步步默认安装即可
  4. Java自动化安卓测试脚本 appium+java自动化测试框架_Android_02

  • 编辑两个坏境变量:
    变量名:ANDROID_HOME , 值:sdk安装路径,比如我的:C:\Users\herby\AppData\Local\Android\android-sdk
    并在环境变量Path后面追加:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

安装完成了后,sdk目录下含有tools,platform-tools 需要自行到 Android SDK manager ,对默认下载项全部下载

验证是否安装成功,输入命令行:adb ,显示如图:

Java自动化安卓测试脚本 appium+java自动化测试框架_maven_03


3. JDK安装:下载JDK1.8版本,直接在官网下载

设置坏境变量:

  • 环境变量名:JAVA_HOME, 值:JDK安装路径,如:C:\Program Files\Java\jdk1.7.0_01
  • 变量名: CLASSPATH, 值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
  • 环境变量Path,值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
    验证JDK是否安装成功,输入: java -version, 结果如图
  1. 安装安卓模拟器,我选择的是网易mumu(sdk自带的模拟器一直黑屏,目前还没有解决,难受。)下载地址:http://mumu.163.com/ ,安装一直点下一步即可,安装完成,可以测试下adb连接模拟器, 在dos界面输入命令:adb connect 127.0.0.1:7555 , 成功如下图:我之前已经连接过了,所以它提示已经连接了
  2. 安装appium-desktop, 下载地址:https://github.com/appium/appium-desktop/releases ,选择合适的版本,比如:appium-desktop-Setup-1.2.4.exe ,我下载是1.8.2 版本,下载安装一键完成,然后启动appium,如下图

    点击启动,在点击start inspector session(右上角搜索图标),设置Desired capabilities,可以把自己定义好的保存下来,方便下次使用,不然关闭后就会消失掉。

    点击Start Session 按钮,成功入下图:这里,我用小米便签做测试app

    Desired Capabilities基本的设置如下:
    设置参考官网:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
  3. 配置Maven:http://maven.apache.org/ 下载之后解压,放在一个指定目录:
    设置环境变量 :
  • 变量名:MAVEN_HOME, 值:maven所在路径
  • 变量名:Path,值:%MAVEN_HOME%\bin

验证是否配置成功,输入命令: mvn -v

Java自动化安卓测试脚本 appium+java自动化测试框架_Java自动化安卓测试脚本_04


maven本地仓库设置:打开Maven 的文件夹,打开conf->settings.xml,配置本地仓库地址,不修改则默认为C盘用户目录下的m2文件,可设置自己本地仓库存放的地址

设置仓库的镜像,在setting.xml文档中添加:

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>

如图:

Java自动化安卓测试脚本 appium+java自动化测试框架_java_05


7. 安装Intellij ,官网一键安装即可。

到此环境搭建完毕。

接下来,创建maven的工程文件,开始编写自动化脚本

  • 新建工程:

    选择maven,填入groudId等 一直next即可,建好如下图:
  • 添加自动化所需的依赖,写入pom.xml 文件
<dependencies>
        <!--appium依赖-->
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>4.1.2</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!--testng-->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.0.0-beta1</version>
            <scope>test</scope>
        </dependency>

        <!--防止出现 Injector NoClassDefFoundError 的错误 -->
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>3.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>


</project>
  • 下载TestNG插件, settings > Plugins > 搜搜testng, 选中,点击OK

    下载好并安装,右击工程文件,就会出现下图菜单:

从现在开始,我们开始编辑脚本。

  • 首先编写一个基础class(Basic.java),配置启动被测app
package util;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeClass;

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

public class Basic{
    public static AppiumDriver driver;
    
    @BeforeClass
    public void setUp() throws InterruptedException, MalformedURLException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "Android Emulator");
        capabilities.setCapability("automationName", "Appium");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "6.0.1");
        capabilities.setCapability("appPackage", "com.xiaomi.notes");
        capabilities.setCapability("app", "C:\\Users\\herby\\Downloads\\xiaomiNotes.apk");
        capabilities.setCapability("clearSystemFiles", true);

        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities );
        Thread.sleep(2000);
    }
}
  • 为了定位元素,创建 BasicPage.java,我们用selenium的PageFactory.initElements()方法进行初始化PageObject
package Pages;

import org.openqa.selenium.support.PageFactory;
import util.Basic;

public class BasicPage {
    public BasicPage() {
        //Initialize PageObject
        PageFactory.initElements(Basic.driver, this);
    }
}
  • 创建Page.java,继承BasicPage类,对元素进行初始化
package Pages;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class HomePage extends BasicPage {

    @FindBy(xpath = "//android.widget.ImageButton[@resource-id = 'com.xiaomi.notes:id/notelist_MenuBar_Add']")
    public WebElement btnOfAdd;
}
  • 编写测试脚本 addnotes.java, 继承Basic 类,case:打开笔记app,点击Add按钮
package TestCase;

import Pages.HomePage;
import org.testng.annotations.Test;
import util.Basic;

public class TC01_AddNotes extends Basic {

   HomePage homePage;

    @Test
    public void AddNotes(){
        homePage = new HomePage();

        homePage.btnOfAdd.click();

    }
}
  • 运行脚本,运行前,确保adb已经连接模拟器,appium已启动。