win7上搭建android开发环境使用appium自动化测试android应用(一)

如何通过appium在win7上使用android模拟器测试android应用?

本编文章参考了大量网络现存文章,并根据自己的实际情况编写。希望对想用appium的初学者能有所帮助!

一、为什么选择appium ?

你不需要以任何方式重新编译或者修改你的app,就可以在所有的平台上使用标准的自动化APIs
你可以用你喜欢的开发工具使用任何 WebDriver 兼容的语言来编写测试用例.比如 Java, Objective-C, JavaScript with Node.js (in both callback and yield-based flavours), PHP, Python, Ruby, C#, Clojure, 或者 Perl 可以使用标准的Selenium WebDriver API和特定语言的客户端库.
你可以使用任何测试框架.
依托 WebDriver 意味着你可以押宝在一个已经成为事实上标准的独立,自由和开放的协议.而不会被限制在任何的专利中

如果在没有使用Appium的情况,你使用了Apple的UIAutomation库就只能通过Javascript,并且只能通过Instruments application插桩应用来运行你的测试. 同样的,在Google的UiAutomator体系下,你只能用Java写你的测试案例. Appium最终开启了跨平台原生移动自动化的可能.

二、win7上搭建appium环境

两种 方式:

第一种:

Install node.js (v.0.8 or greater). Use the installer from nodejs.org.
Install the Android SDK. You will need to run the ‘android’ tool (included in the SDK) and make sure you have an API Level 17 or greater API installed. SetANDROID_HOME to be your Android SDK path and add the tools and platform-tools folders to your PATH variable.
Install the Java JDK and set JAVA_HOME to your JDK folder.
Install Apache Ant or use the one that comes with the Android Windows SDK in the eclipse\plugins folder. Be sure to add the folder containing ant to your PATH variable.
Install Apache Maven and set the M2HOME and M2 environment variables. Set M2HOME to the directory maven is installed in, and set M2 to %M2HOME\bin. Add the path you used for M2 to your PATH.
Install Git Be sure to install Git for windows to run in the regular command prompt.
Instal cURL
简单的说就是安装1—7步中的具有下划线链接的工具。安装完后,执行:

npm install -g appium
npm install wd
appium
node your-appium-test.js
如果你不通过node方式执行js来进行测试的话,前两步就是安装appium(确切的说第一步是安装appium,第二步是安装 selenium webdriver),第三步是启动,安装完成后,直接appium启动即可。但是在实践中,appium从0.16.0在两天之内更新到0.17.3,速度非常快,而且不知道什么原因,执行第一步安装appium后,总是会出错,不是签名错误,就是.net framework框架需要更新。重试了许多次也可能不行,偶尔一次成功了,启动appium后,监听的地址却是0.0.0.0,而不是希望的127.0.0.1 。这个问题可能和网络和机器配置有关系。等appium官网成熟了以后,或许会好。具体情况希望大家能研究出个完整的解决方案。
第 二种:直接下载appium for windows,这个在github上根本下载不下来(不太承认是我网络问题。。。) 。所以找到一个csdn上的下载链接,http://download.csdn.net/download/llf0726/6798087 (下载需要1分,呵呵。),这个版本是0.12.3,可以使用。

三 、Android SDK安装

按照 win7上安装appium第一种方式中的第二步的链接下载最新的android SDK,解压到某个目录,如C:\adt-bundle-windows-x86_64-20131030 ,然后配置系统环境变量,增加ANDROID_HOME,值:C:\adt-bundle-windows-x86_64-20131030\sdk;添加系统path路径:%ANDROID_HOME%\platform-tools;%ANT_HOME%\bin; OK。

四 、eclipse安装ADT插件和启动android模拟器

eclipse -帮助-安装新软件-添加:

ADT Plugin
https://dl-ssl.google.com/android/eclipse/
安装 完成后,别忘了eclipse中设置android SDK目录,我的是:C:\adt-bundle-windows-x86_64-20131030\sdk

启动 android模拟器:

eclipse -窗口-AVDM(Android Virtual Devices Manager)-New:

AVD Name : 启一个你自己的名字(我的是sdfs);选择一个皮肤(Skin),SD Card 设置一个值:(我的是512);OK。

点击 Start-Launch 启动android模拟器

五 、eclipse中新建maven工程

pom.xml中要有这两个依赖:

org.seleniumhq.selenium selenium-java 2.39.0 junit junit 4.11 我的工程目录:

其中 apps是新建的文件夹,用来存放我们要测试的app应用,两个应用均可从网上下载。

我们的测试类写在androidtest.androidtest下面(因为用了junit框架),其中AndroidContactsTest.java的内容如下:

package androidtest.androidtest;
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"));
    File appDir = new File(classpathRoot, "apps/ContactManager");
    File app = new File(appDir, "ContactManager.apk");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("device","Android");
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
    capabilities.setCapability(CapabilityType.VERSION, "4.4");
    capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
    capabilities.setCapability("app", app.getAbsolutePath());
    capabilities.setCapability("app-package", "wandal.activity");
    capabilities.setCapability("app-activity", ".WelcomeActivity");
    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.className("android.widget.ImageButton"));
    textFieldsList.get(0).click();
   // textFieldsList.get(0).sendKeys("Some Name");
   // textFieldsList.get(2).sendKeys("Some@example.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());
    }

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

}

本类的作用就是自动安装上我们apps中的ContactManager应用,并且启动,然后点击该应用的一个元素。
要注意:

capabilities.setCapability(“app-package”, “wandal.activity”);
capabilities.setCapability(“app-activity”, “.WelcomeActivity”);
这两行中的package和activity的值是如何来的,我们要通过对所要测试的应用进行反编译,使用apktool工具

下载地址 :http://download.csdn.net/download/guiguzi1110/4865276

解压后,

这三个文件要放到同一个目录下,然后再cmd中执行apktool d E:\xxx.apk E:\xxx1\

进入xxx1目录下面,会发现有个AndroidManifest.xml,打开这个文件

包名在这里看:
<manifest android:versionCode=“12” android:versionName=“2.6.0.0.0” package=“com.xxx.xxx”
一般位于XML定义的下一行

启动Activity在这里看,带有LAUNCHER关键字





那么,本例中就是com.xxx.xxx.SplashActivity

使用apktool工具反编译的时候,有时候会报 java.lang.OutOfMemoryError: Java heap space错误
我的解决办法是:编辑apktool.bat文件,在最后一行jar后面加入 -Xmn16m -Xms64m -Xmx128m

OK,不报错了,正常反编译。

六、运行工程

1.启动appium,双击appium的图标,点Launch,可以看到如下界面:

2.eclipse中启动android模拟器(启动较慢,耐心等待,大概2分钟后,呵呵),然后解锁:

android 模拟器中安装和删除应用的方法(可能会用到:)):

  1. 安装Android应用程序
  1. 启动Android模拟器
  2. adb install (apk在PC上的路径/)*.apk (将apk文件上传到了模拟器自带操作系统的data/app目录下了)
  3. Android模拟器界面中浏览打开apk应用程序
  1. 删除Android应用程序
    删除Android有好几种方法。
    第一种:命令行用uninstall
    adb uninstall apk的包名(用EC切换到DDMS的File Explorer中查看,data/data下)
    第二种:命令行进入模拟器操作系统
    adb shell (进入模拟器自带的操作系统)
    cd data/app (切换到apk的安装目录)
    rm ***.apk (用EC切换到DDMS的File Explorer中查看,data/app下)
    第三种:1.1以上模拟器上删除,非常简单
    模拟器的 Setting -> Applications -> Manage applications -> XXX程序 -> Uninstall
    这样就可以删除了。


  2. 作者:马克社区何老师