环境准备
基础环境搭建我就不详细描述了,简书上各位大神写的很详细。与其他教程不同的是,使用macbook做测试,另外直接用Appium Destop进行元素获取。
使用到的工具主要包括:
1.Appium Destop1.7(目前最新版本,当然在跑本例子之前,需要将基础环境搭好,能自动安装app到手机并打开),Destop可以直接在模拟器中获取元素的id,xpath,使用起来非常方便
2.Eclipse等java开发环境,我用的是maven+junit的框架
项目工程我上传到GitHub上了,大家可以打包下载,直接加载测试
https://github.com/lillianJi/AppiumCalculatorTest
步骤
1.新建maven的项目,同时配置pom.xml文件
在pom.xml中加下以下依赖
、、、
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>5.0.4</version>
</dependency>
、、、
2.创建测试的java类(类名请随意)
、、、
private AppiumDriver driver;
@Before
public void setup() throws Exception {
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(CapabilityType.BROWSER_NAME, "");
cap.setCapability("platformName", "Android"); //指定测试平台
cap.setCapability("deviceName", "FFK021XXX971"); //指定测试机的ID,通过adb命令`adb devices`获取
cap.setCapability("platformVersion", "7.0"); //测试机系统如Android的版本号
//将上面获取到的包名和Activity名设置为值
//可以通过adb shell dumpsys activity activities 命令去获取,realActivity后即是包名和activity名(必须在手机上启动你需要测试的APK,再用命令获取当前apk的包名和activity名)
cap.setCapability("appPackage", "com.android.calculator2");
cap.setCapability("appActivity", "com.android.calculator2.Calculator");
//A new session could not be created的解决方法
cap.setCapability("appWaitActivity","com.android.calculator2.Calculator");
//每次启动时覆盖session,否则第二次后运行会报错不能新建session
cap.setCapability("sessionOverride", true);
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);
@Test
public void plus(){
//获取1,需要将Appium Destop 连上手机获取本机上的id
driver.findElementById("com.android.calculator2:id/digit_1").click();
//获取+
driver.findElementById("com.android.calculator2:id/op_add").click();
//获取9
driver.findElementById("com.android.calculator2:id/digit_9").click();
//获取=
driver.findElementById("com.android.calculator2:id/eq").click();
}
@After
public void tearDown() throws Exception {
driver.quit();
、、、
对于类中的一些值,大家需要根据自己的情况修改,请仔细看代码中的注释
3.启动Appium Destop服务


4.在Eclipse里面用Junit运行测试类
若报错,可使用debug模式进一步调度确定是哪一步出错
5.观察结果
如果能够运行成功,手机上的计算器apk会自动启动,并实现1+9=10的操作,成功后自动关闭apk
6.疑难杂症
1. 若执行以后发现apk能成功启动,但执行到抓取页面元素时直接报NullpointerException
说明io.appium(java-client)和selenium-java的版本不匹配,需要将java-client的版本更新之最新
2. 需要检查id是否正确,可通过Appium Destop去获取
Appium Destop中Desired Capabilities配置如下
{"platformName": "Android",
"platformVersion": "7.0",
"deviceName": "FFK021733XXX971",
"automationName": "Appium",
"appPackage": "com.android.calculator2",
"appActivity": ".Calculator"}

然后StartSession,会连接手机计算器并打开模拟器,这时可以在模拟器中查看元素的id

以上的deviceName/appPackage/appActivity可以根据下面的命令去获取
3.确保手机一直连接着电脑,同时打开着调度模式。另外不能锁屏要不然会连接不上
4. 其他技巧
a.查看当前app的包名和activity
在terminal输入命令adb shell dumpsys activity activities, realActivity后即是包名和activity名
b.查看手机的设备名
在terminal输入命令adb devices即可看到
网友评论