首先说下楼主也是个新手,摸索了好几天天 终于完成了第一个 appium 程序,帖子写的不合理的地方,请大家轻喷,指导,大家一起学习。写这个帖子就是为了方便新手能快速入门,也算是自己的一种巩固吧。好了,开始直奔主题!

一,环境配置篇
在 Windows 上配置
1)下载安装 node.js(http://nodejs.org/download/)安装的时候有选项,记得把环境变量添加到 path 路径
2)使用 npm 安装 appium,运行 CMD 输入 npm install -g appium(有些朋友反应在 cmd 下运行 npm 无效,如果这样请把 nodejs 的目录添加到用户变量的 path 下重启 cmd 即可 参考帖子:http://blog.csdn.net/iispring/article/details/8023319),如下图:

3)下载安装 Android SDK(http://developer.android.com/sdk/index.htmlANDROID_HOME 环境变量指向 SDK 路径,PATH 变量设定%),设置 ANDROID_HOME%\tools 和% ANDROID_HOME%\platform-tools
4)安装 JDK 并设置 JAVA_HOME 环境变量
5)安装 ANT,并将%ANT_HOME%\bin 路径加到 PATH
6)安装 MAVEN,设置%M2_HOME%\bin,并添加到 PATH 中
7)安装 Git
8)运行 CMD 输入 appium-doctor 检查你的环境是不是都配置好了 如图:

9)下载 selenium 类库(http://docs.seleniumhq.org/download/ 请下载 java 平台的)
10)Eclipse 自定义库中新建一个 selenium 库 指向本地的硬盘 selenium lib 的路径 如图:

到此 环境算是配置好了,其中(5,6,7 这三步骤只是为了构建项目和从 github 拖拽项目时候需要的,我的帖子不涉及到,但是为了 appium-doctor 顺利检查成功通过还是设置下)

二,appium 启动篇
由于我测试是连接真机的,所以这里需要先通过 adb devices -l 命令获得 真机的 udid 号,详细步骤如下:
1)真机(安卓版本 4.2.2)通过 USB 连接 电脑,驱动装好,打开 USB 调试模式
2)运行 cmd 输入 adb devices -l 查看 UDID 如图:

3)再在 cmd 中输入 appium -a 127.0.0.1 -p4723 -U4d007e9a1b0050d1 (-a 表示 ip,-p 表示端口,-U 表示设备的 udid 可以通过 appium -h 查看更多命令)
4)如果如下图所示 就表示 appium 服务启动成功了,注意这个窗口不要关闭 因为这是 appium 的服务 关了就关了服务,后面过程无法执行,而且这个窗口也是 日志输出的窗口用于排错。

三,代码执行篇
这块我主要是执行的是官方的演示代码:通讯录管理 app,安装打开 app,并添加一个联系人保存的操作
1)首先去下载 ContactManager.apk(http://yunpan.cn/QInSWzP2YWgTJEclipse 工作目录的 apps 文件夹下),等会放在
2)打开 Eclipse,新建一个 java project,去 appium 的 github(https://github.com/appium/appium/tree/master/sample-code/examples/java/junit/src/test/java/com/saucelabs/appiumAndroidContactsTest.java 拷贝下来)上将 放到自己的包下,如下图所示:

其中 apps 目录 是我放 ContactManager.apk 用的
3)在 Project 上右键点击 Build Path -> Add Libraries.. ->User Library -> 勾选自己刚刚自建的 selenium 库(环境配置篇 第 10 步)这样代码就不会因为在不到对应的库而报错了
4)对代码进行部分修改:

package com.incito.appiumdemo;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.HasTouchScreen;
import org.openqa.selenium.interactions.TouchScreen;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteTouchScreen;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.io.File;
import java.net.URL;
import java.util.List;

public class AndroidContactsTest {
    private WebDriver driver;

    @Before
    public void setUp() throws Exception {
        // set up appium
        File classpathRoot = new File(System.getProperty("user.dir"));
        //存放app目录:apps
        File appDir = new File(classpathRoot, "apps");
        File app = new File(appDir, "ContactManager.apk");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("device","Android");
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
         //我真机的安卓版本是4.2.2
        capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
         //使用的是windows平台
        capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
        capabilities.setCapability("app", app.getAbsolutePath());
        capabilities.setCapability("app-package", "com.example.android.contactmanager");
        capabilities.setCapability("app-activity", ".ContactManager");
        driver = new SwipeableWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }

    @After
    public void tearDown() throws Exception {
        driver.quit();
    }

    @Test
    public void addContact(){
        WebElement el = driver.findElement(By.name("Add Contact"));
        el.click();
        List<WebElement> textFieldsList = driver.findElements(By.tagName("textfield"));
       textFieldsList.get(0).sendKeys("wangyang");
        textFieldsList.get(1).sendKeys("18872573204");
        textFieldsList.get(2).sendKeys("stephenwang@gmail.com");
        driver.findElement(By.name("Save")).click();
    }

    public class SwipeableWebDriver extends RemoteWebDriver implements HasTouchScreen {
        private RemoteTouchScreen touch;

        public SwipeableWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {
            super(remoteAddress, desiredCapabilities);
            touch = new RemoteTouchScreen(getExecuteMethod());
        }

        public TouchScreen getTouch() {
            return touch;
        }
    }
}

5)代码右键 run as "Junit test" appium 窗口会有日志记录,代码无报错 而且在真机上完成了这个安装 apk 添加联系人的操作(注意输入法不要默认是中文输入,不然会报错),如图:


注意:我的 appium 版本是 0.16.0 据说最新版本的上面会报报 EXDEV error 解决办法见:http://testerhome.com/topics/639
基于 Windows 平台上的使用 Java 语言实现 appium 自动化程序 for Android devices 的详细步骤就算是写完了 有点像记流水账 ,希望对于新手有点用。 请各位大神轻喷,我也是新手。有时间的话 在写个完整版的基于 Windows 平台上的使用 Python 语言实现 appium 自动化程序 for Android devices。


↙↙↙阅读原文可查看相关链接,并与作者交流