GithubHelp home page GithubHelp logo

cafe's Introduction

cafe's People

Contributors

leimingjlu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cafe's Issues

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

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

当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

当对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遍历问题:getAllOperatableViews遍历后节点数目不对

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

自动遍历的问题

我导入了 Cafe / tests / TestTravel工程,并设置了目标PackageName及MianActivity,并替换了cafe3.1的jar包,但运行的时候提示Could not find test class. Class: com.baidu.cafe.test.CafeTraveler,请问是什么原因,thanks。

如何使用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,帧数等性能吗?

哪里下到4.2的

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

com_baidu_cafe_remote项目下有错误

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

鲁工你好,我是最近才接触自动化测试,问下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做的吗?如果想做控件级别的话点击下去在测试的程序中获取到点击的控件?
谢谢

eclipse中只能跑一个脚本

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

遍历测试报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)

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");等

这个一般是为什么呢?

请问跨进程测试如何操作

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

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

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

这几个方法

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里面套进去呢?

等待指导啊。。。。

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:中文"
没有反映,输入英文正常,不支持中文么?另外如何获取调用的返回值?

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

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

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

有同学想写一个不需要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零基础教程

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

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

请问一下,利用android签名检查漏洞实现的,这块是在哪里实现的(代码在哪块)?

文档中只是讲了利用android签名检查漏洞的方法实现以及最后的结果。记得在之前的issue中提到过,编译cafe.jar的时候需要android的SDK,是在这个过程中实现的吗?代码体现在哪里呢?

Cafe测试方法传递参数

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

请问录制回放如何操作

我看有一个TestRecord工程,里面开始local.beginRecordCode()后,预留了很久,是不是这段时间就可以进行点击操作了,但是我试了一下,这端时间点击各种控件后,没有生成新的代码序列,结束后要怎么草可以回放呢?谢谢。

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.