第一个测试项目,来源一家公司的面试实操题
本来想也整个流程,包括搭建环境,测试用例,脚本编写,但是觉得第一次写,写那么全可能我的逻辑性就不太严密了,所以只写了脚本部分,剩余的之后再补。
进行编码(我将代码复制如下)
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 测试 看结果