手机自动化测试(5)--Appium环境搭建、可能遇到的问题以及附属工具

1、搭建Android环境

http://blog.csdn.net/jlminghui/article/details/39582895

注:需要设置系统变量“ANDROID_HOME”。


2、安装Node.js

http://www.nodejs.org/download/

下载相关操作系统的版本


安装过程,一路“Next”。


3、安装Appium

(1)下载地址:http://appium.io/ 下载完毕后解压到pc本地,将压缩包里有appium.cmd文件的路径设置到环境变量path中。


(2)进入命令行,输入appium-doctor 



另外也可在线安装(可选,网络不好还是选上面的好些)

(1)进入命令行

(2)输入命令:npm install -g appium

注:翻墙下载比较靠谱

(3)等待更新完毕

(4)安装后验证:appium-doctor


4、创建虚拟机或使用实际设备

创建一个4.4.2的虚拟机

不熟悉这块的朋友参考:http://blog.csdn.net/jlminghui/article/details/39582895


5、创建Java工程(Eclipse)

 推荐使用maven工程,直接可以maven导入。方法如下

1.创建一个maven工程

2.百度maven中央仓库,在中央仓库搜索selenium、appium、junit,找到对应的依赖加入到pom.xml,就可以不用再去对应的官网下载包了,又麻烦又慢

<dependencies>
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-server</artifactId>
			<version>2.48.2</version>
		</dependency>
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>2.48.2</version>
		</dependency>
		<dependency>
			<groupId>io.appium</groupId>
			<artifactId>java-client</artifactId>
			<version>3.2.0</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
	</dependencies>


一般方法
(1)导入Selenium类库

http://selenium-release.storage.googleapis.com/2.44/selenium-java-2.44.0.zip

http://selenium-release.storage.googleapis.com/2.44/selenium-server-standalone-2.44.0.jar

(确认2014.11.14有效,如无效请访问http://docs.seleniumhq.org/download/ 进行下载 )


注:需要导入两个,一个是客户端,一个是服务端,服务端库不导入会导致运行时报错。

(2)导入Appium类库

https://search.maven.org/remotecontent?filepath=io/appium/java-client/1.2.1/java-client-1.2.1.jar 

(确认2014.11.14有效,如无效请访问http://appium.io/downloads.html  进行下载 )

注:此处如果选择下载最新的2.0以上的版本,会导致编译new AppiumDriver时报错。解决办法见:

http://blog.csdn.net/zhubaitian/article/details/39717889 




6、运行Appium示列


(1)下载示例程序

https://github.com/appium/sample-code/tree/master/sample-code/apps/ContactManager

上面链接中下载ContactManager.apk

(点击下方的RAW按钮下载)

并将该apps放到当前项目的apps目录下(目录自行创建)


(2)下载示例程序测试

地址:https://github.com/appium/sample-code/tree/master/sample-code/examples/java/junit/src/test/java/com/saucelabs/appium

java文件为“AndroidContactsTest.java

(点击下方的RAW按钮下载)

内容经过更改如下

[java]  view plain copy
  1. package com.Demo;  
  2.    
  3. import io.appium.java_client.AppiumDriver;  
  4. import org.junit.After;  
  5. import org.junit.Before;  
  6. import org.junit.Test;  
  7. import org.openqa.selenium.By;  
  8. import org.openqa.selenium.WebElement;  
  9. import org.openqa.selenium.remote.CapabilityType;  
  10. import org.openqa.selenium.remote.DesiredCapabilities;  
  11.    
  12. import java.io.File;  
  13. import java.net.URL;  
  14. import java.util.List;  
  15.    
  16. public class AppDemo {  
  17.     private AppiumDriver driver;  
  18.    
  19.     @Before  
  20.     public void setUp() throws Exception {  
  21.         // set up appium  
  22.         File classpathRoot = new File(System.getProperty("user.dir"));  
  23.         File appDir = new File(classpathRoot, "apps");  
  24.         File app = new File(appDir, "ContactManager.apk");  
  25.         DesiredCapabilities capabilities = new DesiredCapabilities();  
  26.         capabilities.setCapability(CapabilityType.BROWSER_NAME, "");  
  27.         capabilities.setCapability("platformName""Android");  
  28.         capabilities.setCapability("deviceName","Android Emulator");  
  29.         capabilities.setCapability("platformVersion""4.4");  
  30.         capabilities.setCapability("app", app.getAbsolutePath());  
  31.         capabilities.setCapability("appPackage""com.example.android.contactmanager");  
  32.         capabilities.setCapability("appActivity"".ContactManager");  
  33.         driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);  
  34.     }  
  35.    
  36.     @After  
  37.     public void tearDown() throws Exception {  
  38.         driver.quit();  
  39.     }  
  40.    
  41.     @Test  
  42.     public void addContact(){  
  43.         WebElement el = driver.findElement(By.name("Add Contact"));  
  44.         el.click();  
  45.         List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");  
  46.         textFieldsList.get(0).sendKeys("Some Name");  
  47.         textFieldsList.get(2).sendKeys("Some@example.com");  
  48.         driver.swipe(1005001001002);  
  49.         driver.findElementByName("Save").click();  
  50.     }  
  51. }  


(3)启动android4.4.2虚拟机

(4)命令行启动后输入:appium 


(5)appium启动到对应设备:appium -a 127.0.0.1 -p4723 -Uemulator-5554 (-a表示ip,-p表示端口,默认都是4723,-U表示设备的udid,可以通过adb devices查看)



(6)项目右键>“Run As”>“JUnit Test”(选择Eclipse JUnit Launcher)

       以上步骤确认可以运行成功,但由于笔者也是刚接触Appium,可能存在遗漏,也请大家帮忙指出,另外也可以使用maven和相关Eclipse插件会更方便些,网上例子很多可自行查找。





以下是在phonegap平台上测试app遇到的一些问题,有遇到的同学可以看看

Appium遇到问题:

问题一:
问题 rg.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.

解决办法:
(1)启动appium

(2)运行cmd 输入 adb devices  查看UDID 如图:


(3)再在cmd中输入 appium -a 127.0.0.1 -p4723 -Uemulator-5554 (-a表示ip,-p表示端口,默认都是4723,-U表示设备的udid 可以通过appium -h查看更多命令)

(4)如果如下图所示 就表示 appium服务启动成功了,注意这个窗口不要关闭 因为这是appium的服务 关了就关了服务,后面过程无法执行,而且这个窗口也是 日志输出的窗口用于排错。



问题二:
问题:org.openqa.selenium.SessionNotCreatedException: A new session could not be created.
(Original error: Device ZX1C622BU3 was not in the list of connected devices)
(WARNING: The server did not provide any stacktrace information)

解决办法:可能手机驱动未安装成功,虽然在adb devices中可以正常查看到devices


问题三:
问题:org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Waited 20 secs for selendroid server and it never showed up)

解决办法:
查看包的签名的和Activity
例如:APP从I5版本后启动界面的capabilities.setCapability("appActivity", ".CordovaApp");
从I5版本后Acitivity变成了MainActivity
capabilities.setCapability("appActivity",".MainActivity");// 被测app的Activity类


问题四:
org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. (WARNING: The server did not provide any stacktrace information)

解决方法:
查看设备上是否安装Selendroid,或者升级Selendroid

IOS问题五:
org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. (WARNING: The server did not provide any stacktrace information)

解决办法:IOS_webkit_debug_proxy –c –[Udid] -d


问题六

error: Couldn't start Appium REST http interface listener. Requested port is already in use. Please make sure there's no other instance of Appium running already.

因为端口被node占用,可以用如下退出node

找出PID命令::netstat -ano|findstr "7922"   (这个4723是被占用的端口,我们需要先找该占用该端口程序的PID)


停止PID命令:taskkill /pid 8828 /f


工具一

        SDK\tools下的:uiautomatorviewer

        作用:查看元素ID、Name、坐标

工具二

        SDK\build-tools\23.0.0下的:aapt

        作用:查看启动包名和首页ACTIVITY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值