您的位置:首页 > 产品设计 > UI/UE

UiAutomator 相关 Java 知识(上)

2016-09-29 16:41 441 查看
概要

—封装方法与模块化用例

—基本数据类型与流程控制

—数组与集合

1.封装方法与模块化用例

—什么方法(图片)



—模块化用例(图片)



—代码演示

公共类代码部分

package com.UiAutomator_about_java;

import android.view.KeyEvent;
import android.widget.TextView;

import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class BaseClass extends UiAutomatorTestCase{
/*开启app
* */
public void lauchAPP() throws UiObjectNotFoundException{
//初始化用例场景
exitAPP();
//获取需要点击的对象
getObjectByText("电话").clickAndWaitForNewWindow();
}

//退出应用
public void exitAPP(){
//按三次back键
pressKeyCode(KeyEvent.KEYCODE_BACK,3);
//按一次home键
pressKeyCode(KeyEvent.KEYCODE_HOME, 1);

}

//打开拨号盘
public  void openDial() throws UiObjectNotFoundException{
//点击对象
getObjectByDesc("拨号键盘").click();
}

//输入电话号码
public void inputPhonenum(String num) throws UiObjectNotFoundException{
//使用正则API验证输入的是否是纯数字
if(num.matches("\\d+")){
for(int i =0;i<num.length();i++){
getObjectByTextClass(num.charAt(i)+"",TextView.class.getName())
.click();
//延时
sleep(100);
}
}else{
fail("input num err!");
}
}
//按拨号键 打电话
public void pressDial() throws UiObjectNotFoundException{
getObjectByDesc("拨打").click();
}
//挂断电话
public void hanUp(){
getObjectByDesc("结束通话");
}

//通过text获取对象
public UiObject getObjectByText(String text){
return new UiObject(new UiSelector().text(text));
}
//通过desc(描述)获取对象
public UiObject getObjectByDesc(String desc){
return new UiObject(new UiSelector().description(desc));
}
//通过className 和 text 双层验证获取对象,
public UiObject getObjectByTextClass(String text,String className){
return new UiObject(new UiSelector().text(text).className(className));
}
//通过className获取对象的方法
public UiObject getObjectByClassNmae(String classname){
return new UiObject(new UiSelector().className(classname));
}
//通过resource-id 获取对象
public UiObject getObjectByResourceId(String resourceid){
return new UiObject(new UiSelector().resourceId(resourceid));
}

/*按键方法
* keyCode 键值
* time 按几次
* */
public void pressKeyCode(int keyCode,int time){
for(int i = 0;i<time;i++){
UiDevice.getInstance().pressKeyCode(keyCode);
}
}
}


实际用例调用与执行部分代码

//开启(计划)
@Override
protected void setUp() throws Exception {
// TODO Auto-generated method stub
super.setUp();
//lauchAPP();//开启应用
}

//测试用例
public void testlauchAPP() throws UiObjectNotFoundException{
openDial();//打开拨号盘
inputPhonenum("112");//拨打电话
pressDial();
sleep(2000);//通话时间
hanUp();//挂断电话
}

//销毁(任务)
@Override
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown();
exitAPP();//退出应用
}


2.Java 基本数据类型与流程控制

—java 数据类型的划分(图片)



—java 流程控制(图片)



演示代码

目标任务:

—操作数 — 随机生成一个0-100的整数

—操作符 — 加减乘除

—被操作数 — 随机生成一个0-100的整数

—验证结果 — 获取计算器计算结果和电脑计算结果比对

公共方法

//开启APP
public void launchAPP() throws UiObjectNotFoundException{
exitAPP();
getObjectByDesc("应用").clickAndWaitForNewWindow();
getObjectByText("计算器").clickAndWaitForNewWindow();
getObjectByClassNmae(TextView.class.getName()).clearTextField();
}
//随机产生一个0-100的整数
public double randomInputData() throws UiObjectNotFoundException{
//为了方便,排除0的情况
int num = 0;
while(num == 0){
num = new Random().nextInt(100);//随机产生0-100的整数
}
String s = num+"";//int 转 String
//按键
for(int i =0; i<s.length();i++){
//拆分字符串,实现按键
pressKeyboard(s.charAt(i)+"");//点击拆分后的字符串

}
return Double.valueOf(num);//转换成double类型
}

//按键方法
public void pressKeyboard(String text) throws UiObjectNotFoundException{
getObjectByTextClass(text, Button.class.getName()).click();//点击对象

}

//获取随机操作符
public int  getRandomOperation() throws UiObjectNotFoundException{
int num = new Random().nextInt(1000);
if(num<250){
pressKeyboard("+");
return 1;
}else if(num>=250 && num<500){
pressKeyboard("−");
return 2;
}else if(num>=500 && num<750){
pressKeyboard("×");
return 3;
}else{
pressKeyboard("÷");
return 4;
}

}
//获取期望值
public double calculator(double one,int operation,double two){
switch(operation){
case 1:
return one+two;
case 2:
return one-two;
case 3:
return one*two;
case 4:
return one/two;
default:
break;
}
return -100000;
}

//获取实际值
public double getActual() throws UiObjectNotFoundException{
String text = getObjectByResourceId("com.android.calculator2:id/formula").getText();
/*
* 减63 0点66666
* 有的时候txt的值出现汉字需要转换
* contains(包含)
* replace(替换)
* */
if(text.contains("减")){
text = text.replace("减","-");
}
if(text.contains("点")){
text = text.replace("点", ".");
}
return Double.valueOf(text);
}


实际用例调用的方法与执行部分代码

public void testRandom() throws UiObjectNotFoundException{
double one = randomInputData(); //随机数方法1
//operation(操作) 这里指带操作符(加减乘除)
int operation = getRandomOperation();//获取随机操作符

double two = randomInputData(); //随机数方法2
//keyboard(按键盘)
pressKeyboard("="); //按键
//expected(期望的) calculator(计算器)
double expected = calculator(one,operation,two); //期望值
//验证 actual(实际的)
assertEquals(expected,getActual(), 0.1);//期望值与实际值对比
}


3.数组与集合

—数组(图片)



—集合(图片)



演示代码

/*
* 获取文件管理器list count
* */
public void testListCount() throws UiObjectNotFoundException{
int count =getListCount();
System.out.println("count"+count);
}

public int getListCount() throws UiObjectNotFoundException{
HashSet<String> filename = new HashSet<String>();//创建HashSet集合对象
UiScrollable list = getScrollObjectByClass(ListView.class.getName()); //获取父级对象
UiSelector content = new UiSelector().className(LinearLayout.class.getName());
list.scrollToBeginning(5);//滚动到某个对象 设置步长为5
//设置标识
boolean flag = false;

while(flag){
int count =list.getChildCount(content); //获取子类数量
//根据子类的数量执行觉得循环多少次
for(int i =0;i<count;i++){
//通过 子类获取到子类的后代类 获取他的text内容
String name = list.getChildByInstance(content, i)
.getChild(new UiSelector().className(TextView.class.getName()))
.getText();
filename.add(name); //有就会添加没有,就不会添加
}
if(flag){
break;
}
if(!list.scrollForward(80)){//向前滚动 步长80, 滚动大概半页多一
flag = true;
}
}
return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  流程控制 java