最近在使用UIautomator完成公司的一个主流程的自动化,因为不适用H5和IOS所以会放弃这个工具的使用,现在记录在使用uiautomator的一些问题:

案列1:使用命令去启动要运用的apk包

使用命令方式启动,可以使用SDK中自带的aapt工具,路径是在E:\Soft\JAVA\adt-bundle-windows-x86_64-20131030\sdk\build-tools\android-4.4,使用时,需要在我的电脑中去配置,配置百度能解决

1..验证aapt是否可用,如下,验证aapt的包名

命令行:aapt dump badging 安装包地址,如果能出现包名而不是报错的提示,则aapt能够使用

2.Uiautomator中使用aapt的方式启动进程:

am start -n com.hzins.mobile / com.hzins.mobile

Am start -n 包名/启动的activity

如果不知道启动的进程,在aapt中单独使用命令,查看里面的activity,如下图所示

测试代码:Runtime.getRuntime().exec("am start -n com.xxxxx.mobile(packgename)/com.hxx.xxx.act.ACT_Splash(stactivity) ");

案列2,在登录控件中,登录框和密码框,是相同resouceid,class,并且密码框没有文本标识是哪一个文本框,

解决办法:可用“insrance”标识定位,相同控件中

instance(0)表示第一个,instance(1)表示第二个

不写instance就默认是instance(0)

3.案列:在提交登录时,某些控件的clickables是为flase这样是就不能使用点击如:

1.提交订单,有提示未登录

2.控件的点击的属性不可用,怎么获取

解决办法:获取外层可用的控件,注意标识

3.捕获异常监听,如启动时升级提醒和显示框

解决:uiwatcher结构应该是这样: main(){ 注册watcher 一个uiselector相关操作 删除watcher } 还需要注意:swipe(startX, startY, endX, endY, steps) --在手机上滑动,从(startX,startY)到(endX,endY)。steps表示滑动的这个距离分为几步完成,数目越少,滑动幅度越大。

String watcherName = "watcher1";

getUiDevice().getInstance().registerWatcher(watcherName, new UiWatcher(){//android.widget.ImageView是导航页第一个页面的控件

UiObject runte=new UiObject(new UiSelector().className("android.widget.ImageView"));

@Override

public boolean checkForCondition() {

// TODO Auto-generated method stub

if(runte.exists())

{

int x=getUiDevice().getInstance().getDisplayWidth();

int y=getUiDevice().getInstance().getDisplayHeight();

//getUiDevice().swipe(startX, startY, endX, endY, steps)

getUiDevice().swipe(600, y/2,x/4,y/2,5);

}

Log.d("tag", "成功了点击");

return true;

}

});

//去判定首页任意一个控件

UiObject runte=new UiObject(new UiSelector().className("android.widget.ImageView").resourceId("com.hzins.mobile:id/bt_ok"));

runte.clickAndWaitForNewWindow();

// 删除watcher

getUiDevice().removeWatcher(watcherName);

uiautomator的坑和AAPT命令方式启动一个应用程序的更多相关文章

  1. 在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口

    #define ProcessBasicInformation 0 typedef struct { DWORD ExitStatus; DWORD PebBaseAddress; DWORD Aff ...

  2. 【.net 深呼吸】启动一个进程并实时获取状态信息

    地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. ...

  3. 如何在终端使用后台运行模式启动一个Linux应用程序

    这是一个篇幅不长但是十分有用的教程,可以帮助你在终端启动一个Linux应用程序,并且使终端窗口不会丢失焦点. 我们有很多可以在Linux系统中打开一个终端窗口的方法,这取决于你的选择以及你的桌面环境. ...

  4. weblogic的安装和注意的问题以及在idea怎么用weblogic启动一个web服务

    第一步下载weblogic: 大家可以通过我的网盘下载weblogic,地址如下 https://pan.baidu.com/s/1NkZ_Gd-xfim5YGcdtjYoUw 第二步安装weblog ...

  5. gulp启动一个小型web服务器配置&browserify(require)

    var gulp = require('gulp'), connect = require('gulp-connect'), // 运行live reload服务器 browserify = requ ...

  6. 第七周——Linux内核如何装载和启动一个可执行程序

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 part1 实验 ...

  7. android技巧(一):如何方便知晓当前Activity?如何管理应用中的Activity?如何最佳的启动一个Activity?

    1.如何方便知晓当前Activity? 可以不看代码根据当前界面就知道界面所在Activity的写法: 建立BaseActivity,继承自Activity,在BaseActivity的OnCreat ...

  8. C# 只启动一个实例完全解决方案

    工作上经常会遇到"程序只能启动一个实例"这样的需求. 我想,这样的需求应该很普遍,所以没打算去动脑筋,去找谷歌问下就得了,用下来发现,不是这里不爽就是那里不行. 先说下我详细的几点 ...

  9. android intent隐式调用之一个应用程序启动另一个应用程序

    理解Intent的关键之一是理解清楚Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似:另一种是隐式的Intent,即Inten ...

随机推荐

  1. ASP.NET服务器控件OnClientClick事件中Eval()作为js方法的参数的一种写法

    参考代码: <input type="button" OnClientClick='<%#Eval("DeptID", "DelUserD ...

  2. LeetCode题解——ZigZag Conversion

    题目: 把一个字符串按照Z型排列后打印出来,例如 "PAYPALISHIRING" 重新排列后为3行,即 P A H N A P L S I I G Y I R 那么输出为&quo ...

  3. Esper系列(十三)Splitting and Duplicating Streams

    功能:将同一个事件流分发到其它的事件流中. 格式: 1  ; i < events.length; i++) {   78              EventBean event = even ...

  4. POJ3922 A simple stone game

    网上有很多解题报告,我的理解就是可以用类似数学归纳的方法证明,就是取一个数,让对手进入必败态. 详细见论文.

  5. hdu3315-My Brute(费用流 or KM算法)

    题目:My Brute Seaco是一个漂亮的妹子,喜欢玩一款名叫My Brute的游戏.情人节快到了,starvae和xingxing都想邀请妹子过节,但是妹子只能陪一个啊,于是两个人决定打一架,用 ...

  6. Java网络编程(客户端和服务端原理)

    运行下面的程序,浏览器端输入自己主机的IP地址+端口号(8888),会看到服务器返回的数据内容,Eclipse控制台会打印显示收到的信息, 通过我们自定义的服务器,可以看到浏览器端向服务器发送的请求信 ...

  7. hdoj 1106 排序

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  8. Hive Metastore 代码简析

    1.  hive metastore 内部结构 1.1 包结构 从package结构来看,主要的5个package,让我们来看看这几个package的内容 (1) metastorepackage是m ...

  9. iOS---RunLoop深度剖析

    RunLoop 前言 RunLoop是iOS/OS开发中比较基础的一个概念,在苹果开发中用在事件处理,延迟加载,屏幕刷新等功能的处理,其实抛开语言,RunLoop是一个的架构模式,也就是RunLoop ...

  10. 利用Microsoft Azure Machine Learning Studio创建机器学习实例

    Microsoft Azure云服务推出机器学习的模块,用户只需上传数据,利用机器学习模块提供的一些算法接口和R语言或别的语言接口,就能利用Microsoft Azure强大的云计算能力来实现自己的机 ...