• //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,你转型一下应该都能取吧?

  • @vigossjjj OPENCV 的 matchTemplate 只能对等比例缩放进行判断吧?大神没理解错吧?
    因为有图片的裁剪,目前看到的只有 OPENCV 的 SIFT 和 SURF 算法可能满足需求。
    ANDROID 从原生的 C++ 到 SO,再到 ANDROID 调用,中间路太长了。。。
    准备用 PYTHON 先试试这两个算法了。容易的话,再移植到 ROBOTIUM 那。
    再不行就只能放弃比裁剪图了。。。。

  • 感谢楼上各位大神的回复,事实证明了靠网上 BAIDU 出来的简易算法是不靠谱的。除非是按比例缩放的。。。
    正在学习安装 OPENCV FOR ANDROID 中~拜读一下大神关于 OPENCV 和 JAVACV 的帖子。~
    先谢谢诸位了!

  • @monkey
    流程是这样的:1.APP 通过按钮添加本地的一幅图片到服务器上。服务器会生成缩略图和一个大图。
    2.APP 测可以通过界面首先访问到缩略图,图会有很多,找出新增图片。
    3.点击新增图片,进入大图模式,确认大图与原图一致。
    4.比完以后,删掉对应的图。再比一次保证图已被删掉。
    目前的测试想法是这样:
    1.本地在 RES 下放一个图,然后用 BITMAP 写 SDCARD,然后调 APP 去目的路径添加文件。
    2.从界面下所有的 IMAGEVIEW 下面对比图,找到目标缩略图。
    3.点击目标缩略图,对比大图。如果一致就删掉。。不一致就报错。
    4.全删完以后,再扫一遍所有的图,保证没有重复的。
    现在主要是两个难点:
    1.ROBOTIUM 的 RES 路径下的图片 BITMAP 好像取不出来。。。getResources 方法针对的是 ACTIVITY。具体怎么弄还在 BAIDU。ROBOTIUM 也是最近才接触。
    2.怎么对图片,目前从网上找了个算法,已经改完了放到 ANDROID 上了,好不好用还不知道。还在折腾第一步,不行的话,准备手动上传验证了。。。。如果算法不靠谱的话,就只能用 PYTHON 写 APPIUM 截屏,用第三方工具对比了。
    谢谢诸位大神了~

  • @seveniruby 恩,谢谢大侠,确实才接触这块,JAVA,ANDROID 也就半年前才开始学。APPIUM 只用过最基本的。~CALABASH 没用过。
    感觉 ROBOTIUM 可以直接获取 VIEW,取得手机图更方便。
    APPIUM 感觉截某个指定控件的图感觉更复杂哈。。。所以就用 ROBOTIUM 做了。
    然后就是希望需要上传的图可以放在测试程序上。因为还涉及 APP 上传图片。用 APPIUM 还不知道怎么把 PC 资源搞过去。。。感觉中间的坑可能更多。。。_^
    恩,谢谢大神提供思路,我再想想办法哈~

  • @seveniruby @weamylady 两位大侠。
    我这边应用很大一块就是图片处理,增删,浏览,缩放等。这块怎么做都没有什么经验。
    可能前面需求说得不太清楚吧,图片对比只是最开始的一部分功能,对比完了,还需要针对对比结果对图片再进行二次操作。
    如果 COPY 到 PC 端的话,这就涉及第三方软件了啊。连贯性不就破坏了啊。
    不过目前还没到判断那步。我现在卡在不知道怎么把 ROBOTIUM 下 RES 目录下的图片用 BITMAP 取出来。
    ROBOTIUM 没有 ACTIVITY,还在搜索处理方法中。~

  • @seveniruby 谢谢思寒了啊。
    图已经用 BITMAP 全搞下来了。昨天试了一下用 BITMAP 转成大小一样的,再用自带的 SAMEAS 方法对比,对比结果不一致,确认中间经过了一些处理,只能比相似度了。看样子是得自己写算法了。网上有 JAVA 的源码,试试看转到 ANDROID 平台~试试看了,可以用得话,再拿出来分享。
    我们开发也都是新手,也没这需求,指望不上了。
    OPENCV 是第三方软件吧?主要是我要立即取图下来,立即比。比一致了,还要删掉目标图。然后再从新比一遍,感觉必须要在测试框架里面实现了。

  • @qddegtya ....呵呵,真不是你的问题,暂时还没开始做 WEBVIEW 这块的内容,完全没有概念。。。

  • 赞!~目前还看不懂,看上去挺强大的,留个脚印先!~

  • 直接取 LISTVIEW 的 GETCOUNT 解决了。
    初学,API 看的不细。。。WEBELEMENT 的用法看样子和 APPIUM 还是有很大区别的。

  • 偶也是新人,提供一个思路。你这都是 TEXTVIEW,你可以先确认一下开发是不是写了这几个 TEXTVIEW 的 onclicklistener 的方法,是否按键后会变背景颜色。如果变背景颜色的话,你看看能不能取一下背景颜色?

  • 嗯,谢谢啊。下午用了 SCROLL,DRAG 方法,各种拖动不到位。最后还是用自己封装了 SWIPE 才满足需求。
    还是最基本的靠谱~谢谢!

  • 说的好像不是太清楚。补充一下,比如一个 LISTVIEW,有 3 个元素,其中第三个元素要划屏才能看到。
    用 findelementsbyid 只能看到 2 个元素。大神们都是划屏后,再重新获取一次元素再去掉重复的内容,这样做的么?

  • @sanlengjingvv
    感谢答复,通过大神的讲解理解了。
    我本来的需求是想知道比如 LISTVIEW 下面带 4 个元素,想获取 LISTVIEW 下的元素个数。
    通过大神的解答,通过 findElements 解决了。
    开始用的是 findElement 查找到 LISTVIEW,然后希望通过某种方法获取 LISTVIEW 里面的元素个数。开始以为直接有类似 ANDROID getCount 的方法可以直接调用。
    现在用 findElements 查找下面元素的 ID。问题总算解决了~
    感谢解答!~

  • 翻了一遍 APPIUM PYTHON 源码,没看到.size 的用法,APPIUM 这个用法是查看组件宽度的。
    那就是只有 ROBOTIUM 支持:
    List list=driver.findElementsByClassName("")
    List.size()
    各位大神,我的理解没有问题吧?
    谢谢了!~

  • 主要是希望哪位大神方便的话,提供一下定位元素的一些可以使用的方法。
    群里有大神回答了一下。定位后的元素是 WEBELEMENT 类。
    呵呵,如果方便的话,主要还想知道一下这个类定义在哪里?具体有哪些可以使用的方法?
    如怎么看 LISTVIEW 节点下 INDEX 的个数。呵呵,我再看看 PYTHON 的代码,SELENIUM 新手,还要学习学习。
    如果大神有介绍方法的文档,方便的话提供一下哈~多谢!~

  • @sanlengjingvv @lihuazhang
    感谢楼上大神们的支持,已经可以了,太感谢了!~

  • @lihuazhang 大神啊。EXE 还真没有。已经更换 1.3.4.1 版本。这算是 BUG 吧。。。。
    公司又不能私架代理,网络只能通过公司的 IE 代理。不行的话只能去重新现学 ROBOTIUM 了。

  • 别人家的测试在做什么? at 2014年12月04日

    这帖子感觉很励志啊~
    说说自己,05 年开始一直做测试,今年之前一直在做通讯产品的测试,自己设计一套流程,自己玩。基本上可以这么理解。所谓的协议啥的也很长时间不会有太大的变化,基本上就是和 BSP,信令之类的打交道。
    老项目逐渐淘汰,通讯产品的淘汰速度比 APP 那是慢多了,被老大安排在老项目蹲守。实在是闲着无聊(不用提 BUG,有事支持一下即可),开始学写自动化。
    正好部门转型,开始做一些家用端的产品,就去做一些自动化的脚本编写,前面主要是 API 的编写。目前属于赶鸭子上架型的在学 APP 的自动化。个人感觉 APP 的节奏比通讯行业快了很多,希望跟大家多学一些。~

  • 感谢!~因为 PYPI 提供的 PYTHON 插件说明支持的 APPIUM 是 1.0 的,所以一直都在用 1.0 版本。
    明天换个新版本试试!谢谢先~

  • 感谢楼上的大侠,命令行在 EXE 下,修改后没有用。。。
    公司的网络需要代理啊。所有在线安装的版本基本都用不了。
    请问还有什么办法不?项目有不少运行时间很长的操作。
    再次感谢大家!~

  • 我用的是 WINDOWS 直接可执行的 1.0 版本。现在是 APPIUM 和 PYTHON 程序之间超时断开。所以必须改 APPIUM 的环境变量。
    哎,折腾了一下午了,也没搜到啥有用的信息,只能继续做伸手党了。
    哪位大侠用过 WINDOWS 版本,具体的命令如何执行啊?或者提供一下配置文件修改也行啊。。。多谢!多谢!

  • 还得麻烦您啊。JS 也是新手。。。
    D:\AppiumForWindows>node . --command-timeout 120
    module.js:340
    throw err;
    ^
    Error: Cannot find module 'D:\AppiumForWindows'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3
    能提供一下具体的命令方式么?谢谢了!~