zoukankan      html  css  js  c++  java
  • uiatuomator命令启动apk,与查找多个相同控件

    背景:在做项目时,发现使用uiatuomator中遇到了一些问题,现在把解决方法和思路分享出来

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

    在做自动化时,需要通过命令去启动APK的包,我使用的是sdk中自带的AAPT工具

    使用命令方式启动,可以使用SDK中自带的aapt工具,路径是在E:SoftJAVAadt-bundle-windows-x86_64-20131030sdkuild-toolsandroid-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);

  • 相关阅读:
    windows,linux,esxi系统判断当前主机是物理机还是虚拟机?查询主机序列号命令 风行天下
    zabbix监控网络的出入口流量 风行天下
    python 编写远程连接服务器脚本 风行天下
    zabbix 监控windows端cpu使用率百分比 风行天下
    linux计划任务crontab的使用 风行天下
    cd
    rm
    cp
    Windows XP和Windows 7双系统安装和启动菜单修复
    MapInfo、ArcGIS 狙击战 1
  • 原文地址:https://www.cnblogs.com/chongyou/p/5263163.html
Copyright © 2011-2022 走看看