最近在使用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. Java:基础

    Hello World //HelloWorld.java文件 public class HelloWorld { public static void main(String[] args) { S ...

  2. 【DOM】2.闭包

    1.什么是闭包? 函数嵌套函数 内部函数可以引用外部函数的参数和变量 参数和变量不会被JS中的垃圾回收机制 所收回 2.闭包有啥好处?应用在哪? ①希望一个变量长期驻扎在内存中 ②避免全局变量的污染 ...

  3. activemq api的封装

    今天无聊写段代码..学习一下activemq,简单封装了一下activemq 的topic api.跟jdbc很类似 主要代码: import java.io.Serializable; import ...

  4. 图解Java字符串不变性

    1. 声明字符串 String s = "abcd"; 这里,s存储了“abcd”在这个字符串对象的引用,如下图所示: 2. 将字符串变量s赋值给字符串变量s2 String s2 ...

  5. Read Asia Embedded fell

    first and foremost, 很久没写了,心痒了,手贱了,于是乎在这一刻心静时,积攒的思绪开始回放了,惊世Copy-on-write之文随之面世了; 臭毛孩子拉的 屎 特臭,小毛孩子前途黯淡 ...

  6. POJ 3419 Difference Is Beautiful(RMQ变形)

    题意:N个数,M个询问,每个询问为一个区间,求区间最长连续子序列,要求每个数都不同(perfect sequence,简称PS). 题解:很容易求出以每个数为结尾的ps,也就是求区间的最大值.有一个不 ...

  7. 基于redis的IP地址快速查询

    在一些大数据处理中,我们需要用到IP地址查询,一般为了查询一个IP属于哪个地址,我们通常需要根据一个IP数据库来查询,网络上比较常用的IP库是纯真IP数据库.IP数据库里面的记录一般存储方式为IP的开 ...

  8. A Tour of Go Function values

    Functions are values too. 在函数式语言中中函数都是变量,比如在javascript中 package main import ( "fmt" " ...

  9. svn访问权限控制

    [customer:/]qa = rwreadonly = ryinqixian = r@haowu_partner_dev = r@admin = rw[customer:/branches/v1. ...

  10. C#- Winform调用BAT例子

    前段时间在工作的时候需要用到,百度了好久后找,可是找到了又希望调用的时候窗体不要显示出来. proc.StartInfo.CreateNoWindow = true;       proc.Start ...