51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1766|回复: 1
打印 上一主题 下一主题

Robotium简要学习

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-26 16:39:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. package com.testshipping;

  2. import android.test.ActivityInstrumentationTestCase2;
  3. import android.text.format.Time;
  4. import android.util.Log;
  5. import android.view.View;
  6. import android.widget.TextView;

  7. import com.robotium.solo.Solo;
  8. //import android.widget.RelativeLayout;



  9. @SuppressWarnings("rawtypes")
  10. public class TestShipping extends ActivityInstrumentationTestCase2 {
  11.    
  12.     private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.ziipin.ship.ui.LauncherActivity";
  13.     private static final String Tag = "ShippingLog";
  14.    
  15.    
  16.     private static Class launcherActivityClass;
  17.     private static String phone_no = "";
  18.     private static String phone_sc = "";
  19.     private static final int ticket_pay_way = 3; //默认使用现金账户支付,2为支付宝快捷支付,3为微信支付
  20.     private static int now_day;
  21.     private boolean is_login = true;

  22.    
  23. //
  24. //    public TestShipping(Class activityClass) {
  25. //        super(activityClass);
  26. //        // TODO Auto-generated constructor stub
  27. //    }

  28.     static{
  29.         try{
  30.             launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
  31.         }catch(ClassNotFoundException e){
  32.             throw new RuntimeException(e);
  33.         }
  34.     }
  35.    
  36.     @SuppressWarnings("unchecked")
  37.     public TestShipping() throws ClassNotFoundException{
  38.         super(launcherActivityClass);
  39.     }
  40.    
  41.     private Solo solo;
  42.    
  43.     @Override
  44.     protected void setUp() throws Exception{
  45.         solo = new Solo(getInstrumentation(),getActivity());
  46. //        getUserInfo();
  47.         Log.v(Tag,"get activity。。。");
  48.     }
  49.    
  50.     @Override
  51.     public void tearDown() throws Exception{
  52.         try{
  53.             solo.finalize();
  54.         }catch (Throwable e){
  55.             e.printStackTrace();
  56.         }
  57.         solo.finishOpenedActivities();
  58.         super.tearDown();
  59.     }
  60.    
  61.     public void testLogin() throws Exception{
  62.         Log.v(Tag, "testLogin is starting");
  63. //        final String CurrentActivity;
  64.         
  65.         solo.waitForActivity(LAUNCHER_ACTIVITY_FULL_CLASSNAME, 5000);

  66.         //点击进入买船票的页面
  67.         View textView = solo.getCurrentActivity().findViewById(4);//3、4、5分别代表主要当中的可点击的三个,按顺序进行
  68.         solo.clickOnView(textView);
  69.         
  70.         if (solo.searchText("忘记密码")){
  71.             Log.v(Tag,"未登录,进入登录界面");
  72.             Log.v(Tag,"starting ooooo");
  73.             solo.clearEditText(0);
  74.             solo.enterText(0, phone_no);
  75.             solo.clearEditText(1);
  76.             solo.enterText(1, phone_sc);
  77.             solo.clickOnButton("登录");
  78.         }
  79.         
  80.         
  81.         if (solo.searchText("充值")){
  82.             Log.v(Tag, "已登录,登录成功...");
  83.             Log.v(Tag, "get_user_info is success.");
  84.             //TODO 截图操作
  85.             solo.clickOnText("消费明细");
  86.             solo.scrollDown();
  87.             solo.goBack();
  88.         }
  89.         
  90.         solo.clickOnText("退出登录");
  91.         solo.waitForDialogToOpen(1000);
  92.         solo.clickOnButton("确认");
  93.     }
  94.    
  95.     public boolean IsLogout(){
  96.         try{
  97.             solo.clickOnText("退出登录");
  98.             solo.waitForDialogToOpen(1000);
  99.             solo.clickOnButton("确认");
  100.             return true;
  101.         }catch(Exception e){
  102.             e.printStackTrace();
  103.             return false;
  104.         }
  105.     }
  106.    
  107.     public void testLogout() throws Exception{
  108.         solo.waitForActivity(LAUNCHER_ACTIVITY_FULL_CLASSNAME, 5000);
  109.         View textView = solo.getCurrentActivity().findViewById(4);
  110.         solo.clickOnView(textView);
  111.         
  112.         if(solo.searchText("充值")){
  113.             if(IsLogout()){
  114.                 solo.sleep(1000);
  115.                 if(solo.searchText("忘记密码")){
  116.                     Log.v(Tag,"登出成功");
  117.                 }else{
  118.                     Log.v(Tag,"登出失败");
  119.                 }
  120.             }else{
  121.                 Log.v(Tag,"登出失败");
  122.             }
  123.         }
  124.         
  125.         if(solo.searchText("忘记密码")){
  126.             
  127.         }
  128.     }
  129.    

  130.     public void testMyOrderAndPay() throws Exception{
  131.         Log.v(Tag,"我的订单");
  132.         String clickorder = "本地订单";
  133.         is_login = IsLogin();
  134.         solo.waitForActivity(LAUNCHER_ACTIVITY_FULL_CLASSNAME, 1000);
  135.         
  136.         //点击进入买船票的页面
  137.         View textView = solo.getCurrentActivity().findViewById(5);//3、4、5分别代表主要当中的可点击的三个,按顺序进行
  138.         solo.clickOnView(textView);        
  139.         
  140.         if(is_login){
  141.             //TODO
  142.             clickorder = "我的订单";
  143.         }else{
  144.             //TODO
  145.             clickorder = "本地订单";
  146.         }


  147.         solo.clickOnButton(clickorder);
  148.         solo.clickOnButton("查询订单");
  149.         solo.clickOnButton(clickorder);
  150.         
  151.         solo.clickOnButton(3);//本地订单,查询订单,船票订单;分别对应button index未1,2,3
  152.         
  153.         if(solo.searchText("未使用")){
  154.             solo.clickOnText("未使用");
  155.             solo.sleep(1000);
  156.             
  157.             if(solo.searchText("订单一")){
  158.                 if(solo.searchButton("立即付款")){
  159.                     solo.clickOnButton("立即付款");
  160.                     SelectPayWay(is_login);
  161.                 }
  162. //               
  163. //                if(solo.searchText("发送朋友")){
  164. //                    solo.clickOnText("发送朋友",1);
  165. //                    solo.waitForDialogToOpen();
  166. //                    solo.enterText(0, phone_no);
  167. //                    solo.clickOnButton("发送");
  168. //                }
  169.                
  170.             }
  171. //            solo.clickOnText("历史");
  172. //            solo.sleep(1000);
  173. //            solo.goBack();
  174.             
  175.         }        
  176. //        solo.sleep(1000);
  177. //        solo.clickOnText("查询订单");
  178. //        solo.enterText(0, phone_no);
  179. ////        solo.clickOnButton("获取验证码");
  180. //        solo.goBack();        
  181.     }
  182.    
  183.     @SuppressWarnings("unused")
  184.     public void testMyOrderAndCancelPay() throws Exception{
  185.         Log.v(Tag,"我的订单");
  186.         final String clickorder ;
  187.         is_login = IsLogin();
  188.         solo.waitForActivity(LAUNCHER_ACTIVITY_FULL_CLASSNAME, 1000);
  189.         
  190.         //点击进入买船票的页面
  191.         View textView = solo.getCurrentActivity().findViewById(5);//3、4、5分别代表主要当中的可点击的三个,按顺序进行
  192.         solo.clickOnView(textView);        
  193.         
  194.         if(is_login){
  195.             //TODO
  196.             clickorder = "我的订单";
  197.         }else{
  198.             //TODO
  199.             clickorder = "本地订单";
  200.         }

复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2018-4-26 16:39:24 | 只看该作者
  1. solo.clickOnButton(3);
  2. if(solo.searchText("订单一")){
  3. if(solo.searchButton("取消订单")){
  4. solo.clickOnButton("取消订单");
  5. solo.waitForDialogToOpen(1000);
  6. solo.clickOnButton("放弃取消");
  7. }
  8. solo.waitForDialogToClose(1000);

  9. if(solo.searchButton("取消订单")){
  10. solo.clickOnButton("取消订单");
  11. solo.waitForDialogToOpen(1000);
  12. solo.clickOnButton("确认取消");
  13. }
  14. }
  15. }


  16. public void testOrderSingleTicket() throws Exception{
  17. Log.v(Tag,"买单程船票");
  18. Log.v(Tag,"testOrderSingleTicket。。。。");
  19. solo.waitForActivity(LAUNCHER_ACTIVITY_FULL_CLASSNAME, 5000);
  20. is_login=IsLogin();

  21. //点击进入买船票的页面
  22. View BuyTicket = solo.getCurrentActivity().findViewById(3);//3、4、5分别代表主要当中的可点击的三个,按顺序进行
  23. solo.clickOnView(BuyTicket);


  24. solo.clickOnRadioButton(0);//页面使用RadioButton(单程)为0,往返为1

  25. //选择出发地点
  26. Log.v(Tag, "选择出发地点");
  27. solo.clickOnText("出发地点");
  28. solo.clickOnText("广州-番禺莲花山");
  29. solo.sleep(1000);

  30. //选择到达地点
  31. Log.v(Tag, "选择到达地点");
  32. solo.clickOnText("到达地点");
  33. solo.clickOnText("香港-中港码头");
  34. solo.sleep(1000);

  35. //选择出发日期
  36. Log.v(Tag, "选择出发日期");
  37. solo.clickOnText("出发日期");
  38. //获取需要点击的时间日
  39. int day = GetCurrentDay();
  40. if(day<=10){
  41. //day为index
  42. day = day + 30;
  43. }else{
  44. day = day + 39;
  45. }
  46. View time_day = null;
  47. time_day = solo.getView(TextView.class, day);
  48. solo.clickOnView(time_day);


  49. solo.clickOnButton("选择航班");

  50. //获取航班列表,固定选取当前能选取的最后的航班
  51. // ArrayList<TextView> list = solo.clickInList(0);
  52. // if (list.isEmpty()){
  53. // solo.clickOnText("前一天");
  54. // }
  55. solo.sleep(500);
  56. solo.clickInList(3, 0);


  57. solo.clickOnText("普通舱");
  58. solo.clickOnText("头等舱");

  59. solo.clickOnButton(3);
  60. solo.clickOnButton(5);
  61. solo.clickOnText("立即购票");

  62. if(solo.waitForDialogToOpen(1000)){
  63. Log.v(Tag,"成人票和儿童票不一致");
  64. if(solo.searchText("提示")){
  65. solo.clickOnButton("继续");
  66. }
  67. }

  68. SelectPayWay(is_login);
  69. Log.v(Tag,"完成买船票");
  70. }

  71. public void testOrderDoubleTicket() throws Exception{
  72. Log.v(Tag,"testOrderDoubleTicket starting...");

  73. solo.waitForActivity(LAUNCHER_ACTIVITY_FULL_CLASSNAME, 5000);
  74. is_login=IsLogin();

  75. //点击进入买船票的页面
  76. View BuyTicket = solo.getCurrentActivity().findViewById(3);//3、4、5分别代表主要当中的可点击的三个,按顺序进行
  77. solo.clickOnView(BuyTicket);

  78. solo.clickOnRadioButton(1);//页面使用RadioButton(单程)为0,往返为1

  79. solo.clickOnText("出发地点");
  80. solo.clickOnText("广州-番禺莲花山");
  81. solo.sleep(1000);

  82. solo.clickOnText("到达地点");
  83. solo.clickOnText("香港-中港码头");
  84. solo.sleep(1000);

  85. solo.clickOnText("出发日期");
  86. int day = GetCurrentDay();
  87. if(day<=10){
  88. //day为index
  89. day = day + 29;
  90. }else{
  91. day = day + 38;
  92. }

  93. View time_day = null;
  94. time_day = solo.getView(TextView.class, day);
  95. solo.clickOnView(time_day);


  96. solo.clickOnText("出发航班");
  97. solo.sleep(1000);
  98. solo.clickInList(3, 0);


  99. //返程日期使用默认输入的日期
  100. solo.clickOnText("返程航班");
  101. solo.clickInList(3, 0);
  102. solo.clickOnButton("下订单");
  103. // solo.clickOnButton(5);
  104. solo.clickOnButton("立即购票");
  105. SelectPayWay(is_login);
  106. Log.v(Tag,"购票完成");
  107. }


  108. //该方法需要在一个test最初进行调用
  109. private boolean IsLogin(){
  110. Log.v(Tag,"IsLogin。。。");
  111. solo.waitForActivity(LAUNCHER_ACTIVITY_FULL_CLASSNAME, 5000);

  112. //点击进入买船票的页面
  113. View BuyTicket = solo.getCurrentActivity().findViewById(4);//3、4、5分别代表主要当中的可点击的三个,按顺序进行
  114. solo.clickOnView(BuyTicket);
  115. if(solo.searchText("个人账户")){
  116. solo.goBack();
  117. return true;
  118. }
  119. solo.goBack();
  120. return false;

  121. }

  122. @SuppressWarnings("unused")
  123. private void Logout(){

  124. if(IsLogin()){
  125. View BuyTicket = solo.getCurrentActivity().findViewById(4);//3、4、5分别代表主要当中的可点击的三个,按顺序进行
  126. solo.clickOnView(BuyTicket);
  127. solo.clickOnButton("退出登录");
  128. }
  129. solo.goBack();
  130. }

  131. //可能重复使用到的函数
  132. private int GetCurrentDay(){
  133. Time now_t = new Time();
  134. now_t.setToNow();
  135. now_day = now_t.monthDay;

  136. return now_day;
  137. }

  138. private void SelectPayWay(final boolean is_login){
  139. Log.v(Tag,"Select Pay way");

  140. if(solo.searchText("选择支付方式")){
  141. if(!is_login){
  142. Log.v(Tag,"未登录");
  143. if(solo.searchText("登录/注册")){
  144. solo.clickOnText("登录/注册");
  145. solo.sleep(1000);
  146. if(solo.searchText("会员中心")){
  147. //注册新用户
  148. solo.clickOnButton("注册");
  149. if(solo.searchText("请输入电话号码")){
  150. solo.enterText(0, phone_no);
  151. solo.sleep(5000);
  152. if(solo.searchText("号码已存在,请重新输入")){
  153. Log.v(Tag,"注册页面OK。。。");
  154. solo.goBack();
  155. }
  156. }

  157. //进入登录页面登录
  158. solo.clearEditText(0);
  159. solo.clearEditText(1);
  160. solo.enterText(0, phone_no);
  161. solo.enterText(1, phone_sc);
  162. solo.clickOnButton("登录");
  163. }
  164. }
  165. }else{
  166. Log.v(Tag,"已经登录");
  167. solo.clickOnText("充值");
  168. solo.goBack();
  169. }

  170. switch(ticket_pay_way){
  171. case 2:
  172. solo.clickOnText("支付宝快捷支付");
  173. break;
  174. case 3:
  175. solo.clickOnText("微信支付");
  176. break;
  177. default:
  178. solo.clickOnText("现金账户支付");
  179. break;
  180. }
  181. }

  182. solo.clickOnButton("立即支付");
  183. solo.sleep(5000);
  184. solo.goBack();
  185. }
  186. }

  187. 复制代码
  188. 通过以上代码可知,在编写测试类的时候,需要注意的是:

  189. 测试类需要继承自ActivityInstrumentationTestCase2
  190. 需要在测试包中导入robotium-solo-x.x.x.jar,以便能够在代码中import com.robotium.solo.Solo;
  191. 测试类中需要有一个launcherActivityClass(启动activity),以便启动对应的测试APP,否则无法进行测试;
  192. 当然,如果要此测试类能够正常执行,还需要在androidmanifest.xml中配置。

  193. <instrumentation        
  194.         android:name="android.test.InstrumentationTestRunner"
  195.      android:targetPackage="com.your.packagename" />
复制代码
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-20 05:57 , Processed in 0.062876 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表