Appium+Maven+Junit实现手机计算器自动化测试的简

2017-11-29  本文已影响0人  吉利_52d4

环境准备

基础环境搭建我就不详细描述了,简书上各位大神写的很详细。与其他教程不同的是,使用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服务
image.png
image.png
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"}


image.png

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


image.png

以上的deviceName/appPackage/appActivity可以根据下面的命令去获取

3.确保手机一直连接着电脑,同时打开着调度模式。另外不能锁屏要不然会连接不上
4. 其他技巧

a.查看当前app的包名和activity
在terminal输入命令adb shell dumpsys activity activities, realActivity后即是包名和activity名
b.查看手机的设备名
在terminal输入命令adb devices即可看到

上一篇 下一篇

猜你喜欢

热点阅读