//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 了。
这帖子感觉很励志啊~
说说自己,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
能提供一下具体的命令方式么?谢谢了!~