最近在使用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. Pyhton 一行代码求Fibonacci第N项

    递归定义很简单,效率当然很低下,且极易超出栈空间大小. 这样做纯粹是为了体现python的语言表现力而已, 并没有任何实际意义. def fib(x): return fib(x-1) + fib(x ...

  2. Unity3D知识点

    世界空间(World):整个虚拟世界的3d空间,在Unity3d中以米作为单位,如长100米宽100米高100米的立体空间. 屏幕空间(Screen):屏幕2d空间,大小就是屏幕的大小,以像素作为单位 ...

  3. CSS背景与列表

    CSS中背景的使用 CSS中列表的使用 15.1 CSS中背景的使用         属性名称                             属性值                      ...

  4. session 重写进入redis测试

    在实际业务中,当session存储过多 或者操作频繁,业务逐渐扩展的时候,文件存储已经无法满足session操作速度和需求,可以考虑用数据库或者nosql的redis来存储session,本文讲解如何 ...

  5. 【Stage3D学习笔记续】真正的3D世界(二):显示模型

    虽然我们进入真3D世界了,但是上一章的Demo仍然是显示的一个平面,尽管我们的平面在3D空间中旋转可以看出一点3D透视的效果,但是既然是真3D,就要拿出点3D的样子来! 如果要显示3D模型,我们就要告 ...

  6. ecshop数据库表结构

    ecs_account_log //用户账目日志表 ecs_activity //活动表(代码,名称,开始,结束,描述) ecs_ad //广告表(位置,类型,名称,链接,图片,开始,结束,广告主相关 ...

  7. hdu1754线段树维护区间最大值

    #include <iostream> #include <cstdio> using namespace std; #define MAXN 200005 int N,M; ...

  8. BeanFactory not initialized or already closed - call 'refresh' before access

    错误:java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' b ...

  9. JAVA线程全局异常处理

    大家平时写线程很多,但可能很少关注如何捕获线程的全局异常.其实jdk提供了两种捕获全局异常的方法,一种是基于整个线程类(staticsetDefaultUnaughtExceptionHandler( ...

  10. nginx,FastCGI启动语句

    /etc/init.d/nginx restart spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi