@testly 我不是说我哦~不用和我抱歉了哈。
我是说你 @ 恒温~提个建议罢了。~我还没碰过 IOS 的说。。。
提问的艺术。~
在这需要初步的问题定位。
你贴一串找人给你定位,谁有空看啊。~还是心情不好的时候。。。。
@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 的还没有概念。。。
膜拜!~
前段时间有个帖子,跨 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,你转型一下应该都能取吧?