baidu / cafe Goto Github PK
View Code? Open in Web Editor NEWA powerful test framework for Android
License: Apache License 2.0
A powerful test framework for Android
License: Apache License 2.0
百度QA网址
http://baiduqa.github.io/Cafe/cafe_doc/index.html
网页乱码?
remote.launchActivity("com.baidu.news.ui.IndexActivity")这个之后,没有调起百度新闻客户端,而是出现了一个类似于选择打开方式弹框的界面。我这边弹出的是让选择哪几个app的界面
这是为什么呢?
因为对于安卓自动化测试从来没有经验,所以希望有从环境构筑开始的零基础傻瓜式教程.
看到Android推荐下载4.2的,在呢里呢,我这里只看到了3.1的
运行时出现Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'这个问题
有同学想写一个不需要keystore的录制回放工具,http://weibo.com/1907875417/AnpfUmmTB
我想了一下,应该可以实现(没实现过)
在有uiautomator的android版本上:
1.可以通过uiautomator获得当前所有可见UI的(x,y,w,h)
2.通过adb shell getevent获得当前操作的(x,y)
3.根据1、2的信息判断操作落在哪个控件上,这样就能做到控件级的录制回放了
但是如果是ListView类的操作不太好准确记录滑动的停止位置
在没有有uiautomator的android版本上:
可以利用android的签名检查漏洞将Cafe的录制回放的代码注入到dex中而不改变签名,详见http://blog.sina.com.cn/s/blog_be6dacae0101bmq3.html
1、我按照Readme中的步骤进行,在执行make.sh时抛出如下异常:
cat: /proc/cpuinfo: No such file or directory
./make.sh: line 26: build/envsetup.sh: No such file or directory
./make.sh: line 58: mm: command not found
./make.sh: line 60: mm: command not found
但通过adb shell是可以访问到这个文件的,请教是什么原因?
2、cafe具体有哪些功能?使用了robotium编写测试用例,自定义的testRunner,可以监控CPU,帧数等性能吗?
我看有一个TestRecord工程,里面开始local.beginRecordCode()后,预留了很久,是不是这段时间就可以进行点击操作了,但是我试了一下,这端时间点击各种控件后,没有生成新的代码序列,结束后要怎么草可以回放呢?谢谢。
Cafe是否有给测试方法传递参数的机制?如果没有强烈建议加上去。比如有以下场景,要做手机适配测试,实现我针对多种手机写好了拍照的类,运行时要通过传递的参数去new出不同类,调用拍照方法,或者我测试方法里有个循环,传递参数控制循环次数,再比如一个app不允许多点登陆,大量跑case时,用户密码不能写死在case中,只能通过外部传入。据我所知robotium不支持外部传递参数,只能通过读取配置文件的方式,这用起来很不方便。
此项目下SystemLib类下
import android.app.ActivityManagerNative;
import android.app.StatusBarManager;
import android.app.IActivityManager;
import android.content.pm.IPackageDataObserver;
........
等等
不知应该引入哪个jar包
鲁工 你好:
手机应用程序首次安装运行或者升级后首次运行出现提示信息怎么破,自动遍历程序无法遍历,需要手动划屏或者点击,是否有办法跳过提示信息。
如题,我想请问鲁工,如何测试帧率,消耗的网络流量?
运行时报错:
// java.lang.RuntimeException: Unable to instantiate instrumentation ComponentInfo{com.example.android.apis.test/com.baidu.cafe.CafeTestRunner}: java.lang.ClassNotFoundException: com.baidu.cafe.CafeTestRunner
如何解?
操作机型:三星I9300
cafe版本:3.1
相关log
java.lang.NullPointerException
at com.baidu.cafe.remote.Armser.getTopActivity(Armser.java:1239)
at com.baidu.cafe.local.traveler.APPTraveler.travel(APPTraveler.java:116)
at com.baidu.cafe.local.LocalLib.travel(LocalLib.java:2335)
at com.baidu.cafe.local.LocalLib.travel(LocalLib.java:2343)
at com.baidu.cafe.test.CafeTraveler.test_travel(CafeTraveler.java:39)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1738)
我导入了 Cafe / tests / TestTravel工程,并设置了目标PackageName及MianActivity,并替换了cafe3.1的jar包,但运行的时候提示Could not find test class. Class: com.baidu.cafe.test.CafeTraveler,请问是什么原因,thanks。
eclipse导入TestApiDemos时包缺少资源包错误,缺少ApiDemos,怎么解决?
还有就是使用教程步骤太过简化了,不容易明白第一次使用该怎么操作。
请解答,谢谢~
05-27 16:18:53.063: E/AndroidRuntime(8442): FATAL EXCEPTION: monitorCurrentActivity
05-27 16:18:53.063: E/AndroidRuntime(8442): Process: com.example.android.apis, PID: 8442
05-27 16:18:53.063: E/AndroidRuntime(8442): java.lang.NullPointerException
05-27 16:18:53.063: E/AndroidRuntime(8442): at com.baidu.cafe.local.record.ViewRecorder.setOnTouchListenerOnDecorView(ViewRecorder.java:563)
05-27 16:18:53.063: E/AndroidRuntime(8442): at com.baidu.cafe.local.record.ViewRecorder.updateCurrentActivity(ViewRecorder.java:552)
05-27 16:18:53.063: E/AndroidRuntime(8442): at com.baidu.cafe.local.record.ViewRecorder.access$500(ViewRecorder.java:69)
05-27 16:18:53.063: E/AndroidRuntime(8442): at com.baidu.cafe.local.record.ViewRecorder$2.run(ViewRecorder.java:540)
05-27 16:18:53.063: E/AndroidRuntime(8442): at
java.lang.Thread.run(Thread.java:864)
这是错误日志
还有关于录制的点击是不是基于坐标级别的还是控件级别的?原理是根据getevent做的吗?如果想做控件级别的话点击下去在测试的程序中获取到点击的控件?
谢谢
eclipse导入cafe的全部工程,com_baidu_cafe_remote工程报错,有些引入包找不到,这个怎么解决呢?如果我想自己修改,如何编译通过呢?
请解答,谢谢~
我对你自动遍历代码中level处理一部分不太理解,好像就看到有一个getCurrentLevel(level)的方法。
我的第一感觉是,每一个Activity一个层次,有Activity的跳转level加1,goBack的话level减1,可是对于很多隐藏控件或者弹出框其实属于同一个Activity,就不好做判断了。
请问Cafe框架在做自动遍历的时候是如何做Level处理的?尤其是遇到弹出框这类情况?
目前galaxy S5,HTC one 多款旗舰机已经使用Android4.4,Cafe目前有开发支持计划么?谢谢鲁工
local.clickv然后快捷键出来的只有
local.clickViaPerformClick(view, longClick);
local.clickViewByResName(resName);
local.clickViewByResName(resName, index);
local.clickViewWithoutAssert(arg0);
这几个方法
HI,您好
我用mtc录制了2个脚本,导入到eclipse,run as->android junit test,为什么只跑完第一个脚本就停那儿不动了呢?
你好,请问window 下 如何使用cafe 对apk 直接进行遍历操作? 是否需要重签名等操作?
请问下,代码体现,具体是哪一部份呢
貌似需要 . build/envsetup.sh,这个文件在哪里有?
查看make.sh发现在它的上级目录下应该有一个build目录,该目录下有一个envsetup.sh文件,当前从github下拉取的代码没有该文件。
安装 cafe.apk后,
adb -s emulator-5554 shell am startservice -a com.baidu.cafe.remote.action.name.COMMAND -e function "enterText" -e parameter "String:中文"
没有反映,输入英文正常,不支持中文么?另外如何获取调用的返回值?
first blood~
我们现在的应用必须要跨进程,原来是用Robotium写的,那么现在必须换成一个个持跨进程的框架,所以想到了Cafe。之前没有过linux环境编译的经验,麻烦指导一下。不胜感谢
请问一下,利用android签名检查漏洞实现的,这块是在哪里实现的(代码在哪块)?
文档中只是讲了利用android签名检查漏洞的方法实现以及最后的结果。记得在之前的issue中提到过,编译cafe.jar的时候需要android的SDK,是在这个过程中实现的吗?代码体现在哪里呢?
1、首先我没搞懂跨进程测试的意思。如果是打开其他app的意思的话,不应该是使用remote.launchActivity("com.android.launcher");这个命令吗?
但您的ppt中说是使用 remote.clickViewByText("通讯录");这样的意思就是说,可以退出要测的app,点击ID或Text进入其他app,然后可以在其他app中点击进行操作。
您说的跨进程,是第二种意思对吧。
2、这个remote.clickViewById/Text,这个Id或Text是在Hierarchy Viewer中对应的Id或Text吧?
3、我在使用的过程中,remote.clickViewByText是可以使用的,为什么remote.clickViewById没有反应啊,看源码他们都是调用的同一个方法啊?
请您解答,谢谢!
package com.baidu.cafe.remote下的SystemLib编译不过,提示找不到文件
android.os.storage.IMountService,查了下,这个是os2.2中开放出来的,请问,在高版本中怎么用呢?谢谢
@luxiaoyu ,Accessibility也是相当于回调,是不是可以直接使用,效果跟cafe的hook listener差不多?
鲁小宇你好,我是一家游戏公司的自动化测试开发,我在你的cafe框架上通过反射加上了我们游戏数据的验证,很好用,谢谢!
1.你们的录制MTC,假设生成两个test_casexx()放到Junit上跑,我这边只能跑第一个test_casexxx(),后面那个一直停着,是tearDown()出问题么?
2.比较苦恼的是怎样才能生成比较好的测试报告
(我把cafe改装成一个测试任务里面有多个测试用例)。
我想做成并行执行测试用例和生成报告(报告的日志来自测试用例中的log),
开两个线程?怎么在cafeTestCase里面套进去呢?
等待指导啊。。。。
鲁工,您好!
请问cafe支持A.apk跳到B.apk再回到A.apk的测试路径吗?
如果支持,请问是如何实现的,谢谢!
error message="java.lang.StringIndexOutOfBoundsException: length=88; regionStart=0; regionLength=-1" type="java.lang.StringIndexOutOfBoundsException">java.lang.StringIndexOutOfBoundsException: length=88; regionStart=0; regionLength=-1
at java.lang.String.startEndAndLength(String.java:583)
at java.lang.String.substring(String.java:1464)
at com.baidu.cafe.local.traveler.Operation.getTypeString(Operation.java:288)
at com.baidu.cafe.local.traveler.Operation.isTheSameView(Operation.java:271)
at com.baidu.cafe.local.traveler.Operation.equals(Operation.java:212)
at java.util.ArrayList.indexOf(ArrayList.java:354)
at com.baidu.cafe.local.traveler.APPTraveler.updateNodeChildren(APPTraveler.java:408)
at com.baidu.cafe.local.traveler.APPTraveler.travel(APPTraveler.java:122)
at com.baidu.cafe.local.LocalLib.travel(LocalLib.java:2335)
at com.baidu.cafe.local.LocalLib.travel(LocalLib.java:2343)
at com.baidu.cafe.test.CafeTraveler.test_travel(CafeTraveler.java:39)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:115)
at junit.framework.TestResult.runProtected(TestResult.java:133)
at junit.framework.TestResult.run(TestResult.java:118)
at junit.framework.TestCase.run(TestCase.java:124)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1667)
下面是我做的修改,可以参照。
--- make.sh.orig 2014-07-31 11:15:16.844323178 +0800 +++ make.sh 2014-07-31 11:17:17.241337182 +0800 @@ -11,6 +11,8 @@ CPU_NUMBER=`cat /proc/cpuinfo | grep processor | wc -l` MODE_PROGUARD="false" +#set -o errexit + usage() { echo "usage: $0" @@ -53,7 +55,13 @@ make_cafe() { # make cafe.jar - cafe_intermediates="$ANDROID_TOP/out/target/common/obj/JAVA_LIBRARIES/cafe_intermediates" + if [ -z $OUT_DIR_COMMON_BASE ];then + OUT_DIR=$ANDROID_TOP/out + else + OUT_DIR=$OUT_DIR_COMMON_BASE/`echo $ANDROID_TOP | awk -F"/" '{print $(NF-3)}'` + fi + + cafe_intermediates="$OUT_DIR/target/common/obj/JAVA_LIBRARIES/cafe_intermediates" cd $SRC/testrunner mm clean-cafe rm -rf $cafe_intermediates @@ -111,7 +119,11 @@ do apk=`echo "$LINE"` apkPath=${apk#"Install: "}; - cp ${ANDROID_TOP}/${apkPath} $SRC/out + if [ ${apkPath:0:1} == "/" ];then + cp ${apkPath} $SRC/out + else + cp ${ANDROID_TOP}/${apkPath} $SRC/out + fi done cp $SRC/testutils/cafe_setup.bat $SRC/out cp $SRC/testutils/cafe_setup.sh $SRC/out
比如测试webview
已安装 Cafe.apk,并Run cafe_setup.sh
然后执行test_sample,判断remote.isViewServerOpen()时提示“View server is not open”. socket不通。
但是还是可以使用点击home,menu等简单操作。但是不能成功mount和unmount,也不能成功local.enterText(0, "Cafe");等
这个一般是为什么呢?
public static ArrayList getAllOperatableViews()方法遍历后返回的View数据不对,我看了方法的实现:发现当(view instanceof ViewGroup)时,getListItems方法只对ListView、ScrollView、GridView三种情况作了处理,其他情况都没有处理,而我获取到的很多view都是其他情况,这样的遍历一定会导致获取到的节点数据丢失的,不知道我说的对不对,如果对的话,麻烦 能指教一下如何处理其他的情况?
remote的一些操作返回值为void(clickscreen),一些返回值为boolean(clickview),能不能统一一下,全部改为返回void,而返回为boolean的,失败的点返回一些自定义异常,这样函数执行失败,返回的信息稍微多一点。同样其他的一些与空间无关的辅助方法,失败也最好别用log的形式,多定义一些异常,会不会更清晰一点?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.