• Appium IOS 真机测试 iphone at 2015年01月29日

    @testly 我不是说我哦~不用和我抱歉了哈。
    我是说你 @ 恒温~提个建议罢了。~我还没碰过 IOS 的说。。。

  • Appium IOS 真机测试 iphone at 2015年01月29日

    提问的艺术。~
    在这需要初步的问题定位。
    你贴一串找人给你定位,谁有空看啊。~还是心情不好的时候。。。。

  • @vigossjjj @squallff
    谢谢两位的建议~正在补 JAVASCRIPT 的基本知识,准备学习一下 APPIUM 的插桩思想。
    目前的想法是能用原生的 INSTRUMENTS 的架构的就用原生的,跨进程麻烦的再考虑 APPIUM。
    应用需要调系统的音视频播放器,ROBOTIUM 插桩的话,播放器不同的话,成本太高,目前就这块还在用 APPIUM 实现。
    多谢!~

  • 赞!很实用~

  • 众筹 +1

  • @xiaorudk
    帅哥,学习一下啊。ALERT 的 UI 是可以用 APPIUM 定位的吧?
    你这么做是想在弹出 ALERT 后做什么,实现什么呢?~有什么内容外部代码不能处理的么?

  • 看一下 SOLO 的 API。
    android.view.View getView(String id, int index)
    Returns a View matching the specified resource id and index.
    元素个数及索引可以取 GRIDVIEW 的 COUNT 来计数。

  • @qinggchu 谢谢回复啊~
    我用 RUNTIME.EXEC 延时到 100S 在 SDCARD 都没有取到。RUNTIME 操作没有返回出错,返回的 LOG 最后就是没有写文件这一步。感觉应该和 APK 的系统权限有关系。
    从理论上看,如果能先把 UIAUTOMATOR 进程起来,就能解决了。UIAUTOMATOR 的进程没有起来。我回头再看看有没有办法在 APK 里面用命令起进程。
    不知道这个区别是不是和 API 的版本有关,我用的是 API19 的。UIAUTOMATOR 今天有大神不是说 ANDROID 4,4 重新封装过,你用的是哪个版本的 API?
    呵呵,我最近正好事不多,学点新的填填以前的坑。不行还是回去老老实实用 APPIUM 做跨进程了~。

  • @seveniruby 感谢思寒,呵呵,是我肤浅了,把问题想的太简单了。。。
    不过这次填这坑,也算是熟悉了一下 RUNTIME 机制和 ANDROID 简单的 SHELL 了。
    后面去学习一下 CAFE 的框架。~
    顺带感慨下,还有好多深坑不会啊,如 HTML,JS。再次感谢两位大侠。~

  • @seveniruby @xuxu
    谢谢两位大侠了,不得不暂时放弃尝试使用该方法在 ROBOTIUM 架构内部来做跨进程了。
    反馈一下当下的进展吧:
    1.目前用 RUNTIME.EXEC 的返回的 PS 结果是 9。不是 0。
    PROCESS 的 WAITFOR 的返回值解释是:the exit value of the native process being waited on。PS 就没看到 PID=9 的进程。。。。
    2.将目的路劲放到了 SD 卡里,SD 卡的读写权限我开了,还是不行。
    暂时没招了。系统权限的水现在对我来说还是太深了。~

  • @xuxu
    好像是我理解错了。。。。SHELL 应该是一样的吧?
    这里有什么文件系统权限的坑么?直接 ADB 命令和 ROBOTIUM 调用有啥区别么?
    麻烦大侠了~

  • @xuxu 谢谢啊,ls 命令是搞定了。
    不过下面这个命令,执行后没有生成
    ShellUtils.shell("uiautomator dump /data/local/tmp/uidump2.xml");一直都没有对应的文件啊。
    这块以前没有接触过,按照大侠你的说法,uiautomator dump 这种用法是 ADB SHELL 才支持,在 INSTRUMENTATION 架构下实际上是不支持的?
    呵呵,大侠我主要是想通过你的接口绕进程。关键是上面这个命令。~

  • @qinggchu @seveniruby
    谢谢两位,谢谢 qinggchu 的分享。我再仔细看看 UIAUTOMATOR 的绕法和 XUXU 的接口吧~还是优先选择 ROBOTIUM 吧。我还需要第三方控件的 TEXT,控件大小等属性,UIAUTOMATOR 应该能取到,取到了再来分享~
    后面还要玩 IOS 的,IOS 的还没有概念。。。

  • @link1220 @fvaryu

    控件属性的问题,非跨进程的操作,我已经放弃 APPIUM 了。ROBOTIUM 很简单就摆平了。
    图像识别,简单的用 PIL.OPENCV 也是最简单的,只能对比没有裁剪过的,等比例缩放的图片。知道开发的裁剪规则,可以自己裁剪对比图片。具体的可以看我前面发的帖子。
    非等比例的图片缩放需要使用特征点算法,OPENCV 有 SIFT 的算法,太复杂,判断起来也是问题。没有现成的,肯定需要自己写。

  • 膜拜!~

  • 前段时间有个帖子,跨 APP 最好用坐标定位,TAP 的方式进行按键。
    你看看用坐标,TAP 的方式是否可行?
    PS:响应大神号召,还是不提钱的好~

  • 同感,假敏捷感觉基本上就是这么玩的。
    我们的专职 QA 的主要工作就是写写 PPT,有问题抓人写文档,写完抓细节,技术他也看不懂,组织知识竞赛啥的。那是相当的轻松啊。

  • @monkey,大神谢了。。。这东西目前还没有概念。下次注意~

  • 。。。。。。。RelativLayout 拼错了。。。
    我只提供一下思路,具体代码要你自己写。

  • private boolean comparebigpic(Bitmap bitmap1, Bitmap bitmap2,int i) {
            int startx=0;
    

    没用过 MARKDOWN 测试一下。

  • ListView A=(ListView) solo.getView("A");
    ArrayList B=solo.getViews(A);
    RelativeLayout C=(RelativLayout) B.get(INDEX);
    ArrayList D=solo.getViews(C);
    这样不行的话,我就救不了你了。~

  • //RGB 算法

    private float orgcompare(Bitmap bitmap1, Bitmap bitmap2) {
            // TODO 自动生成的方法存根
            int [] data1=new int[256];
            int [] data2=new int[256];
            for (int i=0;i<bitmap1.getWidth();i++){
                for (int j=0;j<bitmap1.getHeight();j++){
                    int rgb=bitmap1.getPixel(i, j);
                    int r =(rgb >> 16) & 0xFF;
                    int g = (rgb >> 8) & 0xFF; 
                    int b = (rgb) & 0xFF;
                    data1[(r+g+b)/3]++;
                }
            }
                for (int i=0;i<bitmap2.getWidth();i++){
                    for (int j=0;j<bitmap2.getHeight();j++){
                        int rgb=bitmap2.getPixel(i, j);
                        int r =(rgb >> 16) & 0xFF;
                        int g = (rgb >> 8) & 0xFF; 
                        int b = (rgb) & 0xFF;
                        data2[(r+g+b)/3]++;
                    }
                }
             float zip=((float)bitmap1.getWidth()*(float)bitmap1.getHeight()/(float)bitmap2.getWidth()/(float)bitmap2.getHeight());
             Log.v("mainActivity","图像压缩比:"+String.valueOf(zip));
             for (int i=0;i<256;i++){
                 data1[i]=(int)((float)data1[i]/zip);
    
             }
               float result = 0F;
                    for(int i = 0;i<256;i++){
                        int abs = Math.abs(data1[i]-data2[i]);
                        int max = Math.max(data1[i],data2[i]);
                        result += (1-((float)abs/(max==0?1:max)));
                    }
                    return (result/256)*100;
        }
    //正中按比例去边框
    private boolean comparebigpic(Bitmap bitmap1, Bitmap bitmap2,int i) {
            int startx=0;
            int starty=0;
            int height=0;
            int width=0;
            float slope1=(float)bitmap1.getHeight()/(float)bitmap1.getWidth();
            float slope2=(float)bitmap2.getHeight()/(float)bitmap2.getWidth();
            if (slope1>slope2){
                startx=(int)((float)bitmap2.getWidth()*(0.5-slope2/slope1/2));
                width=(int)((float)bitmap2.getWidth()*slope2/slope1);
                starty=0;
                height=bitmap2.getHeight();
            }
            else 
            {
                startx=0;
                width=bitmap2.getWidth();
                starty=(int)((float)bitmap2.getHeight()*(0.5-slope1/slope2/2));
                height=(int)((float)bitmap2.getHeight()*slope1/slope2);
            }
            Log.v("mainActivity","斜度:"+String.valueOf(slope1)+","+String.valueOf(slope2));
            Log.v("mainActivity","坐标:"+String.valueOf(startx)+","+String.valueOf(starty)+","+String.valueOf(width)+","+String.valueOf(height));
            Bitmap newbitmap2=Bitmap.createBitmap(bitmap2, startx, starty, width, height, null, false);
            compressbitmap(localdir+String.valueOf(i+1)+"newbigpic.jpeg",newbitmap2);
    
        return comparepic(bitmap1,newbitmap2,i);
    }
    
  • 叫开发把 ID 改了。。。
    只取过儿子级的,要不你用 SOLO.GETVIEWS 连续取两层试试?只要是 VIEW,你转型一下应该都能取吧?