搭建好Robotium的环境,大致就是下载安装jdk并配置环境变量,下载并打开Eclipse,下载安装Android SDK Tools并配置环境变量,下载安装ADT插件,创建并打开Android Virtual Device,下载、apk重签名并安装到该device,手动打开人人网应用没问题后环境就算是准备好了。(我学习Robotium时买了杨志伟编著的《手机测试Robotium实战教程》,我自己也总结了一份学习笔记,考虑到作者出书不易我就不上传了,这本书挺好的。)

一些常用的cmd命令,来查看device的状态和jdk的路径(如果adb不是内部或者外部命令,将Android SDK Tools中的adb.exe文件从platform-tools目录下粘贴到tools目录下,然后将platform-tools的路径添加到Path环境变量中即可):

人人网安好后在device中是这样的:

通过打开uiautomatorviewer.bat来捕获安卓界面上的元素。写两个测试,分别实现登录人人网和发状态:

package com.renren.test;

import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import com.robotium.solo.Solo; import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
import android.view.View;
import android.widget.EditText; @SuppressWarnings("rawtypes")
public class RenrenTest extends ActivityInstrumentationTestCase2 {
// The activity name after re-signed.
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.renren.mobile.android.ui.WelcomeScreen";
private static Class LauncherActivityClass;
private Solo solo;
private static final String TAG = "MyResult"; // Initiate.
static {
try {
LauncherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
} @SuppressWarnings("unchecked")
public RenrenTest() throws ClassNotFoundException {
super(LauncherActivityClass);
} @BeforeMethod
protected void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
} public void testCanLogin() throws InterruptedException {
boolean result = waitForTextUnless("登录", "照片");
if (result == true) {
if (solo.searchText("登录")) {
solo.clickOnView(solo.getView("com.renren.mobile.android:id/welcome_hot_spot_login"));
}
waitForText("请输入用户名");
if (solo.searchText("请输入用户名")) {
EditText usrNameText = (EditText) solo
.getView("com.renren.mobile.android:id/welcome_hot_spot_account_layout");
String userName = "用户名";
solo.enterText(usrNameText, userName);
EditText pwdText = (EditText) solo
.getView("com.renren.mobile.android:id/welcome_hot_spot_password_edit");
String pwd = "密码";
solo.enterText(pwdText, pwd);
// Click the login button.
solo.clickOnView(solo.getView("com.renren.mobile.android:id/welcome_hot_spot_login_button"));
}
waitForText("照片");
Thread.sleep(3000);
Log.i(TAG, "已登录");
} else {
Log.i(TAG, "无需登录");
}
} public void testSendInfo() throws InterruptedException {
waitForText("照片");
String sendButtonId = "com.renren.mobile.android:id/tab_item_publisher";
View sendButton = solo.getView(sendButtonId);
solo.clickLongOnView(sendButton);
waitForText("发状态");
try {
String inputEditorId = "com.renren.mobile.android:id/input_editor";
EditText editText = (EditText) solo.getView(inputEditorId);
String message = "Android test!";
solo.enterText(editText, message);
solo.clickOnButton("发布");
waitForText(message);
Thread.sleep(3000);
} catch (Exception ex) {
System.out.println(ex);
}
} private boolean waitForTextUnless(String string, String string2) throws InterruptedException {
boolean signal = true;
while (!solo.searchText(string) && signal) {
if (solo.searchText(string2)) {
signal = false;
return signal;
} else {
Thread.sleep(1000);
}
}
return signal;
} private void waitForText(String text) throws InterruptedException {
while (!solo.searchText(text)) {
Thread.sleep(1000);
}
} @AfterMethod
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}

1、SuppressWarnings的意思是压制警告,详细有几种使用方法可以上网搜一下;

2、创建一个solo类来实现对device当前app页面上元素的交互操作;

3、声明一个TAG,让Log类在LogCat中输出一些指定的信息,方便我们在LogCat中查找与判断测试中经历的一些状态(安卓专用的打log方法哦);

4、Robotium的测试方法名要以test开头,testXXX的形式,运行时要选择Android JUnit Test运行;

5、setUp和tearDown是固定的测试类所必须的加载和销毁应用程序的方法;

5、写了两个wait方法,用来等待页面上的元素,和如果出现例外元素就不继续等待目标元素。

注意:

1、要配置AndroidManifest.xml文件中instrumentation标签中的targetPackage值为apk的包名。否则会运行失败,提示“Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'”;

2、BeforeMethod和AfterMethod这两个标签需要testNg的支持,如果没有testNg的话将这两个标签去掉并换成“@Override”即可。

基于APK的Robotium登录人人网与发状态的更多相关文章

  1. robotium从入门到放弃 三 基于apk的自动化测试

      1.apk重签名   在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法. 首先将被测 ...

  2. Robotium实践之路基于APK创建测试项目

    1.重新对包进行签名操作 .启动re-sign.jar文件 .找到相应的APK,拖拽置resigner中 2.创建基于APK测试的测试工程 .新建一个安卓测试项目 .选择this project

  3. 用python实现模拟登录人人网

    用python实现模拟登录人人网 字数4068 阅读1762 评论19 喜欢46 我决定从头说起.懂的人可以快速略过前面理论看最后几张图. web基础知识 从OSI参考模型(从低到高:物理层,数据链路 ...

  4. 基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验

    一,使用Struts2标签库简化表单 在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp <%@ page language=& ...

  5. 基于SAML的单点登录介绍

    http://blog.csdn.net/csethcrm/article/details/20694993 一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion ...

  6. 基于jwt的用户登录认证

    最近在app的开发过程中,做了一个基于token的用户登录认证,使用vue+node+mongoDB进行的开发,前来总结一下. token认证流程: 1:用户输入用户名和密码,进行登录操作,发送登录信 ...

  7. 基于CSS3动态背景登录框代码

    基于CSS3动态背景登录框代码.这是一款基于jQuery+CSS3实现的带有动画效果的动态背景登陆框特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class ...

  8. 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心

    基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...

  9. 基于CAS的单点登录实战(2)-- 搭建cas的php客户端

    在这之前已经搭好了CAS服务端 基于CAS的单点登录实战(1)-- 搭建cas服务器 PHP-Client php-Client是官方支持的,去官网下个最新版就好了.phpCAS 接入很简单,解压放到 ...

随机推荐

  1. Codeforce Round #222 Div2

    这场断网,本来有个别人的比较卡的无线 但后面睡着了- -! C:额,逆向想下! B:... A:...

  2. JetBrains公司介绍(Java、Python、PHP、Ruby、前端和代码测试与重构的IDE)

    JetBrains JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开 ...

  3. linux第6天 流协议-粘包

    今天学习的主要是对第5天的加强. 比如服务器的多进程,点对点应用聊天程序.父进程子进程互发消息.等等. 流协议-粘包 一般TCP协议会出现粘包,粘包产生的原因一般为.TCP协议是流式传输,不会根据用户 ...

  4. 一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号

    <?php/** * [猴子选大王] * @param  [type] $m [猴子数] * @param  [type] $n [出局次数] * @return [type]    [desc ...

  5. CCF真题之窗口

    201403-2 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示 ...

  6. 算法第四版 在Eclipse中调用Algs4库

    首先下载Eclipse,我选择的是Eclipse IDE for Java Developers64位版本,下载下来之后解压缩到喜欢的位置然后双击Eclipse.exe启动 然后开始新建项目,File ...

  7. JSP-07-使用JavaBean封装数据

    7.1 常命包名 Dao 包中的接口(NewsDao)以及类(NewsDaoImpl)注意负责和数据操作相关的事情. Service 包中的接口和类对dao的方法进行封装和调用,注意负责和业务逻辑相关 ...

  8. 链接库lib和dl的概念,加载方式的区别

    使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟 ...

  9. 【sinatra】设置默认的端口

    加入 set :port, 8888 #默认4567

  10. HTTP请求流程(一)----流程简介

    最近一直在研究如何让asp.net实现上传大文件的功能,所以都没怎么写技术类的文章了.可惜的是至今还没研究出来,惭愧~~~.不过因为这样,也了解了一下http消息请求的大致过程.我就先简单介绍下,然后 ...