实操:安卓app测试 基于 eclipse + AVD +appium

第一个测试项目,来源一家公司的面试实操题

本来想也整个流程,包括搭建环境,测试用例,脚本编写,但是觉得第一次写,写那么全可能我的逻辑性就不太严密了,所以只写了脚本部分,剩余的之后再补。

进行编码(我将代码复制如下)

package com.jisuanqitest.appium;

//我的包名


import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.By.ByName;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.sun.jna.platform.FileUtils;
import org.openqa.selenium.OutputType;
import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit;
//以上是导入的包

public class Jisuanqitest {  

//从我的类名可以看出,是一个计算器app的测试,从apk市场找的,叫iDo Calculator,有计算功能和记录收支功能。


  private  AppiumDriver MT ;

// MT是appium 测试的对象,因为我一开始选的是美团做为我的APP进行测试,但是需要吐槽一下的是,AVD真的太慢了,而且网络连接极不稳定,总卡死,无奈选择了一款体量小,不需要联网的APP,但名字没有换。
  @Before                           
  public void setUp() throws Exception   

//一般APP测试脚本里必有两个方法,一个setUp(),另一个是tearDown(),下面有。setUp,就是做一些前提准备的,具体的每条代码后交代。
  {
      File classpathRoot = new File(System.getProperty("user.dir")); 

//File ,也就是文件,一个目的,指名道姓找地址,要测谁(哪个app),要去哪测(app放在何方)

      File appDir = new File(classpathRoot, "/apps");                         

 //在一开始建立的Java项目中,条件一个文件夹,随便叫啥,里面放你要测试APP
      File app = new File(appDir, "jisuanqi.apk");                              

  //文件夹里APP的名字在交代一下
      DesiredCapabilities capabilities = new DesiredCapabilities();    

//此处多说两句,appium 是基于Selenium ,一款thougtwork公司搞得自动化测试软件,他又是基于webdriver                                                                                                           //我正在学selenium,看一本书上说,seleninm多么多么牛逼,代表着未来,代表着方向,哈                                                                                                                                     //哈。 DesiredCapabilities  实际上很重要,他明确了几件测试时很重要的条件,测谁,安卓的,ios的,虚拟设                                                                                                           //备的,真实设备的,网页的,明确测试对象,
      capabilities.setCapability("deviceName","Android Emulator");    

//告诉计算机我要测试的是  模拟安卓对象
      capabilities.setCapability("platformVersion", "4.2.2");                     

   //平台是4.2.2的
      capabilities.setCapability("avd", "asd");                                         

   //AVD叫asd
      capabilities.setCapability("app", app.getAbsolutePath());
      capabilities.setCapability("appPackage", "com.ibox.calculators");    

 //这句和下一句是要明确apk的信息,有个方法,打开cmd ,输入aapt dump badging  路径\...apk 回车              

 capabilities.setCapability("appActivity", "com.ibox.calculators.CalculatorActivity"); 

//Packagename ,Launch-activity 分别就代表了。


      MT= new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
  }
@After 
  public void tearDown() throws Exception{                                    

   //这就是必有的两个方法的另一个tearDown(),告诉计算机,脚本测完了,最后怎么办,退出.

  MT.quit();
  }
 
  @Test                                                                                                   

 //test 是所谓的测试脚本核心,自我感觉最重要的是要懂得元素定位,定的准,定的巧,少很多事,运                                                                                                                        //行效率高。
  public void meishi() throws InterruptedException {
         MT.findElement(By.name("1")).click();                                                      

    //byname 是一种定位方法,对于有text的就直接可以用了
         MT.findElement(By.name("+")).click();                                                    
         MT.findElement(By.name("2")).click();
         MT.findElement(By.name("=")).click();
         MT.manage().timeouts().implicitlyWait(150, TimeUnit.SECONDS);                  

  //隐式等待150秒,我也不知道为啥我操作的时候老是不等,明天去面试的公司问问技术负责                                                                                                                                                     人
         WebElement e =MT.findElement(By.className("android.widget.TextView"));     

    //byclassname也是一种,通常和List<AndroidElement>搭配,使用与有几个相同类型的时候
         assertEquals("错误","3",e.getText());                                                                        

  //assert..断言,就是If..else的一种形式,三个变量,不懂可以百度或查api
         MT.findElement(By.name("Accounts")).click();      
         MT.tap(1, 614, 996, 200);                                                                                            

   //tab真是风险小,不会出错,UIautoview定好就不会错


         MT.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
                                                                                                        /                                                                //By.xpath("//android.widget.FrameLayout[0]/android.widget.LinearLayout[0]/android.widget.FrameLayout/android.widget.FrameLayout[0]/android.widget.RelativeLayout[0]/android.widget.LinearLayout[0]/android.widget.RelativeLayout[0]/android.widget.ImageView[4]"                                                                                                                                                       

 //xpath,我没在用例中用,但我也出来了,想和大家分享,xpath 我觉得虽然麻烦,写一大堆,但是我觉得本办法却简单,从顶写到尾,看着踏实。
         MT.findElement(By.name("Income")).click();      
         MT.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         MT.findElement(By.name("1")).click();
         MT.findElement(By.name("0")).click();      
         MT.findElement(By.name("0")).click();      
         MT.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         MT.findElement(By.name("OK")).click(); 
         MT.tap(1, 614, 996, 200);
         MT.findElement(By.name("Paid")).click(); 
         MT.findElement(By.name("5")).click();
         MT.findElement(By.name("0")).click();      
         MT.findElement(By.name("OK")).click();          
  }
  
 }


写完脚本后,run as >> junit  测试  看结果









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值