uiatuomator命令启动apk,与查找多个相同控件
背景:在做项目时,发现使用uiatuomator中遇到了一些问题,现在把解决方法和思路分享出来
案列1:使用命令去启动要运用的apk包
在做自动化时,需要通过命令去启动APK的包,我使用的是sdk中自带的AAPT工具
使用命令方式启动,可以使用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.XXX.mobile(packgename)/com.XXXX.mobile.act.ACT_Splash(stactivity) ");
案列2:在登录控件中,登录框和密码框,是相同resouceid,class,并且密码框没有文本标识是哪一个文本框
解决办法:可用“insrance”标识定位,相同控件中
instance(0)表示第一个,instance(1)表示第二个
不写instance就默认是instance(0)
3.案列:在提交登录时,某些控件的clickables是为flase这样是就不能使用点击如:
1.提交订单,有提示未登录
2.控件的点击的属性不可用,怎么获取

解决办法:
获取外层可用的控件,注意标识
4.捕获异常监听,如启动时升级提醒和显示框

解决: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);
uiatuomator命令启动apk,与查找多个相同控件的更多相关文章
- appium滚动查找屏幕外的控件
嗯,还是把自己做的实验保存一下 Appium1.12.1+python2.7 实验滚动,查找屏幕外控件以及控制seekbar scroll() 是根据页面中两个元素位置之间的距离进行滑动. 滑动寻找屏 ...
- UWP 查找模板中的控件
这个标题我也不知道咋起,意思说一下你就明白. 1. 对官方控件的模板进行定制修改,以满足多样化需求,还有漂亮的UI 比如ListView,GridView等. 2. 在设计的情况下并没有这个控件,而在 ...
- C# 查找指定名称的控件(转)
请问我知道控件的名称如何得到这个控件对象呢? var button = this.FindName("button1") as Button; Button button = th ...
- Android中查找一个Layout中指定的子控件
我们通常希望查找一个页面中指定类型的控件,单个控件知道id很容易找到,但是如果是多个呢?或者说是在程序中自定义的控件,且不知道id怎么办呢?如想找到页面中的Spinner,可用以下方法 /** * 从 ...
- 初步探讨WPF的ListView控件(涉及模板、查找子控件)
本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmln ...
- WPF 按名称查找控件
1FrameworkElement类FindName方法 使用过程 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件.FindN ...
- 初步探讨WPF的ListView控件(涉及模板、查找子控件) - GavinJun
本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmln ...
- 梦想CAD控件COM接口自定义命令
在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...
- 梦想CAD控件网页版关于自定义命令
在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...
随机推荐
- uva 11991 Easy Problem from Rujia Liu? vector+map
水题 学习一下数据的存储方法. #include<iostream> #include<cstdio> #include<cstdlib> #include< ...
- delphi 调用 webservice (.NET C#版)
uses XMLIntf, XMLDoc; XML to XTR文件转换 .File-->open打开你要分析的XML文件 .在左边选择你要分析的接点,双击加到中间的转换列表中 .Create- ...
- Razor模板引擎(C#版)语法
1.简介: Razor 是一种标记语法,可以让您将基于服务器的代码(Visual Basic 和 C#)嵌入到网页中. 基于服务器的代码可以在网页传送给浏览器时,创建动态 Web 内容.当一个网页被请 ...
- C#开源资源大汇总
C#开源资源大汇总 C#开源资源大汇总 一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行 ...
- JavaScript要点(七) 函数调用
JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化. this 关键字 注意: this 是保留关键字,你不能修改 this 的值. ⚠️一般而言,在Java ...
- HDU4632:Palindrome subsequence(区间DP)
Problem Description In mathematics, a subsequence is a sequence that can be derived from another seq ...
- Winform 注册机通用软件注册功能之建立有效的软件保护机制
本文转载:http://www.cnblogs.com/umplatform/archive/2013/01/23/2873001.html 众所周知,一些共享软件往往提供给使用者的是一个功能不受限制 ...
- 我的AndroidStudio设置
转载:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/ 官方下载有两个地方,均需要FQ. Android Deve ...
- label WordWrap
procedure TForm1.FormCreate(Sender: TObject);begin Label1.AutoSize := False; Label1.WordWrap : ...
- gradle编译出错:Execution failed for task ':app:compileTestDebugJava'.
今天更新了android studio,从0.5.3升级到0.6.1版本号,结果在IDE中编译时没有问题.可是在命令行时编译就会出现下面错误: :app:compileTestDebugJava FA ...