zoukankan      html  css  js  c++  java
  • uiautomator的坑和AAPT命令方式启动一个应用程序

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

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

    使用命令方式启动,可以使用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.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);

  • 相关阅读:
    OA常见问题和解决方案
    如何用Visio画venn(维恩)图
    小谈SQL表的连接
    记一次视图的应用
    常用sql语句备份
    EF中关系映射问题
    .net core 2.0的一次奇特经历
    .net core 下的Area注册
    win 10+ iis 10 部署.net core 1.1 web api
    AutoMapper差异内容备份
  • 原文地址:https://www.cnblogs.com/chongyou/p/5125499.html
Copyright © 2011-2022 走看看