本人在学习UiAutomator时候看了一些教程,写了一些用例的脚本,昨天终于写了一个相对完整的班级单元的用例,基本把所有功能点都覆盖到了,个人感觉算是一个完整的用例了,分享出来,如果不足,烦请指正。
public void ClassTest() throws UiObjectNotFoundException {//班级管理基本功能测试
startApp();//启动app
checkLog();//检查登录
classManage();//进入班级管理
renameClass();//重命名班级
createClass();//创建班级
searchStudenThrowTel();//通过手机号添加学生
addStudentIntoClass();//通过通讯录添加学生
remarkStudentInfo();//备注学生信息
checkClassNum();//检查班级人数
alterClassInfo();//更改班级备注信息
deleteClass();//删除班级
}
这里面每个都是我自己写的方法,最后之所以没有退出,因为启动app的时候里面加了一个清理后台的方法,所以每次打开运行的时候都是重新打开app。
下面我把每个方法内容也贴出来。
public void startApp() throws UiObjectNotFoundException {//启动app
UiDevice.getInstance().pressHome();
UiDevice.getInstance().pressHome();
clean();//清理后台程序
getUiObjectByText("点知教育").clickAndWaitForNewWindow();//打开app
outputNotable("app启动了!");
}
其中clean();方法之前博客写过了,就不具体贴出来了。
public void checkLog() throws UiObjectNotFoundException{//检查登录立即登录setShort();
boolean log = true;
while(log){
UiObject me = new UiObject(new UiSelector().text("我"));
if (me.exists()) {//检查是否登录
outputNotable("已经登录了!");
log = false;
}else{
UiObject login = new UiObject(new UiSelector().resourceId("com.dianzhi.teacher.school:id/et_user"));
if (login.exists()) {//检查是否进入登录界面
login();//执行登录方法
Date start = new Date();
UiObject me1 = new UiObject(new UiSelector().text("我"));
while(!me1.exists()){//等待进入首页
sleep(100);
Date now = new Date();
long x = now.getTime() - start.getTime();
if (x>10000) {//超时提醒失败
outputNotable("登录失败!");
break;
}
}
}
}
}
setLong();
}
public void classManage() throws UiObjectNotFoundException {//进入班级管理
setShort();
getUiObjectByText("首页").clickAndWaitForNewWindow();
getUiObjectByText("班级管理").clickAndWaitForNewWindow();
setLong();
}
public void renameClass() throws UiObjectNotFoundException {//随机修改班级名称
setShort();
getUiObjextByResourceId("com.dianzhi.teacher.school:id/open_or_close_iv").click();//点击展开设置栏
getUiObjectByText("重命名").clickAndWaitForNewWindow();
int num = new Random().nextInt(90)+10;//生成一个随机数
String classname = "Test"+num;//生成一个随机的班级名
writeText(classname);//重命名班级
getUiObjectByText("确定").clickAndWaitForNewWindow();
String newclassname = getUiObjextByResourceId("com.dianzhi.teacher.school:id/name").getText();//获取当前班级名
assertEquals("修改班级名称失败!", classname, newclassname);//检查是否重命名成功
outputNotable("修改班级名称成功!");
getUiObjextByResourceId("com.dianzhi.teacher.school:id/open_or_close_iv").click();//收回设置栏
setLong();
}
public void createClass() throws UiObjectNotFoundException {//添加班级
setShort();
getUiObjectByText("添加班级").clickAndWaitForNewWindow();
writeText("测试");
getUiObjectByText("确定").clickAndWaitForNewWindow();
String newclassname = getUiObjectByText("该班级还没有学生,请添加学生").getFromParent(new UiSelector().resourceId("com.dianzhi.teacher.school:id/name")).getText();
assertEquals("创建班级失败!", "测试", newclassname);
outputNotable("创建班级成功!");
setLong();
}
这里只写了没有空班级的情况,也可以利用最新创建的班级拍在最后这个特点,点击最后一个班级来实现,这个方法后面后提到。
public void searchStudenThrowTel() throws UiObjectNotFoundException {//通过手机号搜索学生
setShort();
getUiObjectByText("测试").clickAndWaitForNewWindow();
getUiObjectByText("添加学生").clickAndWaitForNewWindow();
writeText("13120454219");
UiDevice.getInstance().pressEnter();
String tel = getUiObjextByResourceId("com.dianzhi.teacher.school:id/tel").getText();//获取当年显示账号的手机号
assertEquals("查找学生失败!", "13120454219", tel);//检查是否是是想要的账号
outputNotable("查找学生成功!");
getUiObjectByText("拉进班级").clickAndWaitForNewWindow();
setLong();
}
public void addStudentIntoClass() throws UiObjectNotFoundException {//从通讯录添加学生
getUiObjectByText("添加学生").clickAndWaitForNewWindow();
getUiObjectByText("通讯录添加").clickAndWaitForNewWindow();
getUiObjectByTextResourceId("男", "com.dianzhi.teacher.school:id/sex").getFromParent(new UiSelector().className("android.widget.LinearLayout").index(3)).click();
UiObject success = new UiObject(new UiSelector().text("添加成功"));
if (success.exists()) {
outputNotable("添加学生成功!");
}else{
outputNotable("添加学生失败!");
}
UiDevice.getInstance().pressBack();
}
这里我是把第一个性别为男的账号添加到班级,因为是固定的,所以在后面检验的时候比较方便。
public void remarkStudentInfo() throws UiObjectNotFoundException {//随机输入学生备注信息
getUiObjectByText("13120454218").clickAndWaitForNewWindow();
getUiObjectByText("请输入备注信息..").clickAndWaitForNewWindow();
writeText("我是测试");
getUiObjectByText("保存").clickAndWaitForNewWindow();
String remark = getUiObjextByResourceId("com.dianzhi.teacher.school:id/remark").getText();
assertEquals("修改备注信息失败!", "我是测试", remark);
outputNotable("修改备注信息成功!");
UiDevice.getInstance().pressBack();
UiDevice.getInstance().pressBack();
}
这里手机号也顺便也检查了一下刚才那个学生是否成功加入了班级。
public void checkClassNum() throws UiObjectNotFoundException {//检查班级人数
String studentnum = getUiObjectByText("测试").getFromParent(new UiSelector().resourceId("com.dianzhi.teacher.school:id/student_count_tv")).getText();
assertEquals("添加学生失败!", "共2名学生", studentnum);
outputNotable("添加学生成功!");
}
public void alterClassInfo() throws UiObjectNotFoundException {//修改班级信息
setShort();
getUiObjextByResourceId("com.dianzhi.teacher.school:id/open_or_close_iv").clickAndWaitForNewWindow();
getUiObjectByText("设置").clickAndWaitForNewWindow();
getUiObjextByResourceId("com.dianzhi.teacher.school:id/set_class_room_info_tv").clickAndWaitForNewWindow();
int num = new Random().nextInt(100);
String info = "info" + num;
writeText(info);
getUiObjectByText("完成").clickAndWaitForNewWindow();
getUiObjectByText("保存").clickAndWaitForNewWindow();
getUiObjectByText("设置").clickAndWaitForNewWindow();
String classInfo = getUiObjextByResourceId("com.dianzhi.teacher.school:id/set_class_room_info_tv").getText();
assertEquals("修改班级简介失败!", info, classInfo);
outputNotable("修改班级简介成功!");
UiDevice.getInstance().pressBack();
getUiObjextByResourceId("com.dianzhi.teacher.school:id/open_or_close_iv").clickAndWaitForNewWindow();
setLong();
}
public void deleteClass() throws UiObjectNotFoundException {//删除班级
setShort();
int num = getUiObjextByResourceId("com.dianzhi.teacher.school:id/lv").getChildCount();
getUiObjextByResourceId("com.dianzhi.teacher.school:id/lv").getChild(new UiSelector().index(num-1)).getChild(new UiSelector().resourceId("com.dianzhi.teacher.school:id/open_or_close_iv")).clickAndWaitForNewWindow();
getUiObjectByText("删除").clickAndWaitForNewWindow();
getUiObjectByText("确定").clickAndWaitForNewWindow();
int newnum = getUiObjextByResourceId("com.dianzhi.teacher.school:id/lv").getChildCount();
if(num-newnum == 1){
outputNotable("删除班级成功!");
}else{
outputNotable("删除班级失败!");
}
setLong();
}
这个只考虑了班级只有一页的情况,如果存在多页还需要写一个获取当前班级数的方法。