如何通过appium在win7上使用android模拟器测试android应用?
本编文章参考了大量网络现存文章,并根据自己的实际情况编写。希望对想用appium的初学者能有所帮助!
一、为什么选择appium ?
依托 WebDriver 意味着你可以押宝在一个已经成为事实上标准的独立,自由和开放的协议.而不会被限制在任何的专利中
如果在没有使用Appium的情况,你使用了Apple的UIAutomation库就只能通过Javascript,并且只能通过Instruments application插桩应用来运行你的测试. 同样的,在Google的UiAutomator体系下,你只能用Java写你的测试案例. Appium最终开启了跨平台原生移动自动化的可能.
二、win7上搭建appium环境
两种 方式:
第一种:
ANDROID_HOME
to be your Android SDK path and add the tools and platform-tools folders to your PATH variable.JAVA_HOME
to your JDK folder.简单的说就是安装1—7步中的具有下划线链接的工具。安装完后,执行:
1 2 3 4 |
> 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中要有这两个依赖:
1 2 3 4 5 6 7 8 9 10 11 12 |
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.39.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!--<scope>test</scope> --> </dependency> |
我的工程目录:
其中 apps是新建的文件夹,用来存放我们要测试的app应用,两个应用均可从网上下载。
我们的测试类写在androidtest.androidtest下面(因为用了junit框架),其中AndroidContactsTest.java的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
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应用,并且启动,然后点击该应用的一个元素。
要注意:
1 2 |
capabilities.setCapability("app-package", "wandal.activity"); capabilities.setCapability("app-activity", ".WelcomeActivity"); |
下载地址 :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关键字
1 2 3 4 5 6 |
<activity android:theme="@*android:style/Theme.NoTitleBar" android:label="@string/app_name" android:name="com.xxx.xxx.SplashActivity" android:launchMode="singleTop" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> |
那么,本例中就是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 模拟器中安装和删除应用的方法(可能会用到:)):
现在 我们就可以启动我们的maven工程执行看自动化效果了:
eclipse 中右键你要运行的类,然后选择运行-junit测试(第一次会让你选择是用eclipse junit还是android的junit,我选后者),然后就可以看到效果了:
appium会先安装这个应用,然后进行自动化操作,然后退出到原始页。
那 么我们如何识别android模拟器上的元素呢?
android SDK 有个工具uiautomatorviewer,在cmd中启动它,就可以捕获正在运行的模拟器的界面元素了。
至于 如何识别元素,就是selenium-webdriver的使用了,详细可以参考:http://wenku.baidu.com/link?url=q5fqut_O-pCyG9w5ubCxbF-38PyqccCfdy4ZCkA4L2XMCrfl58tCE-jkt41v3w516R42rtjCluDfm87trrXojX11dLru-lGYAG2CwaQ9o1O
声明: 本文由( 乐测网 )原创编译,转载请保留链接: win7上搭建android开发环境使用appium自动化测试android应用(一)
-----==== 本站公告 ====-----
1.本站是目前唯一能支持智能手机平板电脑访问的软件测试技术网站.
2.具体访问方法请参考本站的手机访问说明,或直接点击以下链接:
→点击这里打开手机平板访问说明←