GithubHelp home page GithubHelp logo

cafe's Issues

求Cafe零基础教程

因为对于安卓自动化测试从来没有经验,所以希望有从环境构筑开始的零基础傻瓜式教程.

哪里下到4.2的

看到Android推荐下载4.2的,在呢里呢,我这里只看到了3.1的

【讨论】录制回放改进讨论帖

有同学想写一个不需要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

如何使用Cafe??

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测试方法传递参数

Cafe是否有给测试方法传递参数的机制?如果没有强烈建议加上去。比如有以下场景,要做手机适配测试,实现我针对多种手机写好了拍照的类,运行时要通过传递的参数去new出不同类,调用拍照方法,或者我测试方法里有个循环,传递参数控制循环次数,再比如一个app不允许多点登陆,大量跑case时,用户密码不能写死在case中,只能通过外部传入。据我所知robotium不支持外部传递参数,只能通过读取配置文件的方式,这用起来很不方便。

com_baidu_cafe_remote项目下有错误

此项目下SystemLib类下
import android.app.ActivityManagerNative;
import android.app.StatusBarManager;
import android.app.IActivityManager;
import android.content.pm.IPackageDataObserver;
........
等等
不知应该引入哪个jar包

当对apk进行travel时Armser类抛出空指针错误

操作机型:三星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。

鲁工你好,我是最近才接触自动化测试,问下Cafe是不是在4.4下面录制的时候出现空指针

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做的吗?如果想做控件级别的话点击下去在测试的程序中获取到点击的控件?
谢谢

自动遍历(traveler)过程中,层次(Level)是如何加减的?

我对你自动遍历代码中level处理一部分不太理解,好像就看到有一个getCurrentLevel(level)的方法。
我的第一感觉是,每一个Activity一个层次,有Activity的跳转level加1,goBack的话level减1,可是对于很多隐藏控件或者弹出框其实属于同一个Activity,就不好做判断了。
请问Cafe框架在做自动遍历的时候是如何做Level处理的?尤其是遇到弹出框这类情况?

local下确实没有clickViewById()这个方法

local.clickv然后快捷键出来的只有
local.clickViaPerformClick(view, longClick);
local.clickViewByResName(resName);
local.clickViewByResName(resName, index);
local.clickViewWithoutAssert(arg0);

这几个方法

eclipse中只能跑一个脚本

HI,您好
我用mtc录制了2个脚本,导入到eclipse,run as->android junit test,为什么只跑完第一个脚本就停那儿不动了呢?

remote.enterText("中文")

安装 cafe.apk后,
adb -s emulator-5554 shell am startservice -a com.baidu.cafe.remote.action.name.COMMAND -e function "enterText" -e parameter "String:中文"
没有反映,输入英文正常,不支持中文么?另外如何获取调用的返回值?

无root获得system权限,利用android签名检查漏洞

请问一下,利用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没有反应啊,看源码他们都是调用的同一个方法啊?
请您解答,谢谢!

TestService编译不过,只支持os2.2的吗

package com.baidu.cafe.remote下的SystemLib编译不过,提示找不到文件
android.os.storage.IMountService,查了下,这个是os2.2中开放出来的,请问,在高版本中怎么用呢?谢谢

请问该怎样生成比较漂亮的测试报告呢?

鲁小宇你好,我是一家游戏公司的自动化测试开发,我在你的cafe框架上通过反射加上了我们游戏数据的验证,很好用,谢谢!

1.你们的录制MTC,假设生成两个test_casexx()放到Junit上跑,我这边只能跑第一个test_casexxx(),后面那个一直停着,是tearDown()出问题么?

2.比较苦恼的是怎样才能生成比较好的测试报告
(我把cafe改装成一个测试任务里面有多个测试用例)。
我想做成并行执行测试用例和生成报告(报告的日志来自测试用例中的log),
开两个线程?怎么在cafeTestCase里面套进去呢?

等待指导啊。。。。

遍历测试报java.lang.StringIndexOutOfBoundsException

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)

当Android的$OUT_DIR_COMMON_BASE环境变量生效时,make.sh失败

下面是我做的修改,可以参照。

--- 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

View server is not open

已安装 Cafe.apk,并Run cafe_setup.sh
然后执行test_sample,判断remote.isViewServerOpen()时提示“View server is not open”. socket不通。
但是还是可以使用点击home,menu等简单操作。但是不能成功mount和unmount,也不能成功local.enterText(0, "Cafe");等

这个一般是为什么呢?

cafe遍历问题:getAllOperatableViews遍历后节点数目不对

public static ArrayList getAllOperatableViews()方法遍历后返回的View数据不对,我看了方法的实现:发现当(view instanceof ViewGroup)时,getListItems方法只对ListView、ScrollView、GridView三种情况作了处理,其他情况都没有处理,而我获取到的很多view都是其他情况,这样的遍历一定会导致获取到的节点数据丢失的,不知道我说的对不对,如果对的话,麻烦 能指教一下如何处理其他的情况?

一个建议-自定义异常返回函数执行出错信息

remote的一些操作返回值为void(clickscreen),一些返回值为boolean(clickview),能不能统一一下,全部改为返回void,而返回为boolean的,失败的点返回一些自定义异常,这样函数执行失败,返回的信息稍微多一点。同样其他的一些与空间无关的辅助方法,失败也最好别用log的形式,多定义一些异常,会不会更清晰一点?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.