标签: robotium

以编程方式单击Android通知

我是使用Robotium框架测试应用程序的黑盒子.每次安装新应用程序时,正在测试的应用程序都会在状态栏中发送通知.我想点击该通知,但我仍然找不到合适的方法.

当我手动点击一个通知时,我得到以下这些logcat:

I/ActivityManager(  148): START {flg=0x14000000 cmp=com.test.package/.activity.FrontActivity bnds=[0,38][240,86] (has extras) u=0} from pid -1
I/ActivityManager(  148): START {flg=0x14000000 cmp=com.test.package/.activity.ResultActivity u=0} from pid 8600
I/ActivityManager(  148): Displayed com.test.package/.activity.FrontActivity: +1s183ms
I/ActivityManager(  148): Displayed com.test.package/.activity.ResultActivity: +744ms
Run Code Online (Sandbox Code Playgroud)

我知道Robotium不能同时测试2个不同的应用程序,而且我知道你无法获得外部应用程序的通知.

我还尝试通过使用以下代码获取待处理的意图并启动它:

Context context = this.getInstrumentation().getTargetContext().getApplicationContext();
String intentClassString = "com.test.package.activity.FrontActivity";
Class<?> intentClass = null;

try {
    intentClass = Class.forName(intentClassString);
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

Intent intent = new Intent(context, intentClass);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_NO_CREATE);

try {
    pendingIntent.send();
} …
Run Code Online (Sandbox Code Playgroud)

android android-intent robotium android-notifications android-activity

6
推荐指数
1
解决办法
1977
查看次数

Robotium是否可靠地测试活动和碎片的开始速度?

我正在尝试编写黑盒自动化测试来断言"确保登陆页面在启动应用程序的500毫秒内出现"和"确保登录时间不到2秒".我想通过推动真实应用的UI来尽可能地模拟真实用户.

我正在使用Robotium 5.0.1进行黑盒UI测试,我希望添加一些简单的计时代码会很简单.但是,测试似乎在不同的地方间歇性地失败,即使在没有发出网络请求的地方也是如此.看起来在模拟器中本地运行多个测试时会偶尔出现约2秒的延迟(我们还使用CloudBees在云中运行Jenkins测试,尽管我还没有在那里尝试过测试).

Robotium是否适合用于此类测试? 您是否有关于进行这些测试的最佳方法的任何提示?

这是我的测试:

public void testLogin() {
    AppData.getAppData().clear();

    startTimer();
    launchActivity();
    assertTrue(solo.waitForFragmentByTag("landingfragment", 3000));
    stopTimer();
    assertWasQuickerThan(500);

    startTimer();
    solo.clickOnButton("Log In");
    assertTrue(solo.waitForFragmentByTag("loginfragment", 3000));
    stopTimer();
    assertWasQuickerThan(500);

    solo.enterText(0, TestUtils.EXISTING_USER_EMAIL);
    solo.enterText(1, TestUtils.EXISTING_USER_PASSWORD);

    startTimer();
    solo.clickOnButton("Next");
    assertTrue(solo.waitForActivity(LaunchActivity.class, 3000));
    stopTimer();
    assertWasQuickerThan(2000);
}
Run Code Online (Sandbox Code Playgroud)

这是logcat(这表示登陆页面出现在16ms内,但按下登录按钮后,登录页面出现了2079ms):

03-12 14:46:11.535      386-571/system_process I/ActivityManager? START u0 {cmp=com.example/com.example.ui.LaunchActivity} from pid 1180
03-12 14:46:11.555    1180-1193/com.example D/MyApp? LoginTest: Step took 16ms to complete,
03-12 14:46:12.035    1180-1180/com.example D/dalvikvm? GC_FOR_ALLOC freed 1470K, 47% free 3456K/6424K, paused 96ms, total 98ms
03-12 14:46:12.045    1180-1180/com.example I/dalvikvm-heap? Grow heap (frag case) …
Run Code Online (Sandbox Code Playgroud)

performance android automated-tests robotium

6
推荐指数
1
解决办法
582
查看次数

Robotium - 在Sleeper类中自定义PAUSE持续时间

Robotium中的Solo类上的waitForCondition()使用Sleeper对象在检查条件之间休眠线程.Sleeper类的PAUSE定义为500毫秒.我想降低它,理想情况下不需要下载Robotium源代码,更改它,并重新编译Robotium.

我尝试扩展Solo类并构建我自己的Waiter类,该类将使用具有较低睡眠间隔的自定义Sleeper对象,但Waiter具有包级访问权限,因此此路由不可用.

除了最后的关键字,这个提交消息似乎表明自定义配置应该(或即将到来),但我没有看到任何方法在Solo.Config类中自定义这些常量.

有没有人有任何解决方案?谢谢!

更新: @ vRallev在下面的答案通过反射完成工作.我做了一个拉动请求,今天合并到了Robotium.在下一个版本中,您将能够使用Config类配置休眠时间.

java android robotium

6
推荐指数
1
解决办法
59
查看次数

BDD Android UI测试框架?

我正在考虑使用Frank进行UI测试我们的iOS应用程序.是否有支持Android的类似库?我目前正在使用Robotium,但认为能够在两个平台上以相同的格式指定测试会很好.

是否有可能让像JBehave这样的东西在Android上运行?

bdd android cucumber jbehave robotium

5
推荐指数
2
解决办法
9181
查看次数

无法使用robotium和私有方法在android上截屏

我最近一直试图获取屏幕截图,但是每个东西都是徒劳的,文件夹是在api level 8的android模拟器中创建的.我已经提到了下面的代码.

在这段代码中,方法takeScreenShot()应该创建一个目录并存储图像,同时作为android junit testcase执行我得到的结果为100%但不是文件夹没有创建并且没有存储屏幕截图.我应该根据我的手机使用其SD卡吗?

public class NewRobotiumTest extends ActivityInstrumentationTestCase2 {
......
......

    // actual testcase

    public void testRecorded() throws Exception {
        solo.waitForActivity("com.botskool.DialogBox.DialogBox",
                ACTIVITY_WAIT_MILLIS);
        solo.clickOnButton("Show Alert");
        solo.clickOnButton("Ok");
        solo.clickOnButton("Show Yes/No");
        takeScreenShot(solo.getViews().get(0), "testRecorded_1316975601089");
        solo.sleep(2000);
        solo.clickOnButton("Yes");
        solo.clickOnButton("Show List");
        solo.clickOnScreen(118f, 563f);

    }

    /**
     * I have added this to the android-manifest.xml file
     *
     * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     *  
     */

    public void takeScreenShot(final View view, final String name)
            throws Exception {

        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                view.setDrawingCacheEnabled(true);
                view.buildDrawingCache();
                Bitmap b = …
Run Code Online (Sandbox Code Playgroud)

java io android robotium

5
推荐指数
1
解决办法
4213
查看次数

Android Robotium - 如何管理测试用例的执行顺序?

我正在尝试使用Robotium来自动化应用程序的测试.测试用例已记录在案,并且应按特定顺序进行测试.但似乎Junit按字母顺序运行测试..如何重新排列执行顺序?这是我的测试类的基本结构:

public class ETTerminalTest extends ActivityInstrumentationTestCase2<IdleActivity> {
   private Solo solo;
   private static final Logger LOGGER = LoggerFactory.getLogger(ETTerminalTest.class);

   public ETTerminalTest() {
       super("com.employtouch.etterminal.ui.activity", IdleActivity.class);
   }

   protected void setUp() throws Exception {
       solo = new Solo(getInstrumentation(), getActivity());
   }

   @Smoke
   public void testEnterPin() throws Exception {
       ...
   }

   @Smoke
   public void testWhatEver() throws Exception {
       ...
   }
   @Smoke
   public void testSomethingElse() throws Exception {
       ...
   }
    @Override
    public void tearDown() throws Exception {
        try {
            //Robotium will finish all the activities that have been …
Run Code Online (Sandbox Code Playgroud)

junit android robotium

5
推荐指数
1
解决办法
2751
查看次数

测试套件构造失败 - (android.test.suitebuilder.TestSuiteBuilder $ FailedToCreateTests).怎么解决?

我是Android应用程序测试的新手.我使用java代码创建了一个自动化框架.然后我尝试将框架与现有的Robotium测试应用程序集成.但是当我给Run as- >时Android Junit,测试应用程序安装成功,但它会引发异常Exception during Suite construction.

- 我有两个java类 - 例如Class1_Functional库和Class2_Automation框架.我在Class2_Automation FrameworkRobotium框架内创建了一个Class的对象,因此我可以调用在类中声明的函数,我猜这个异常会被触发.

下面的代码显示了我的Robotium框架

package jp.list.app.test;

    import java.io.IOException;
    import java.util.Arrays;
    import android.app.Activity;

    import com.jayway.android.robotium.solo.Solo;

    import  android.test.ActivityInstrumentationTestCase2;
    import android.util.Log;
    import jp.list.app.test.Automation_Framework;
    @SuppressWarnings("unchecked")
    public class TestLogin1 extends ActivityInstrumentationTestCase2
    {

        ///////////////// 
        //Created the object of the class Automation framework where the exception occurs
        ////////////////

    private Automation_Framework autoobj = new Automation_Framework();
    private static final
    String  TARGET_PACKAGE_ID = "jp.list.app";
    private static final
    String LAUNCHER_ACTIVITY_FULL_CLASSNAME ="jp.list.app.JPActivity"; …
Run Code Online (Sandbox Code Playgroud)

java testing android robotium

5
推荐指数
1
解决办法
3367
查看次数

在ChooserActivity在Nexus 5上显示时,Robotium测试未找到ChooserActivity

我开始开发一个Android项目.我正在写测试套件.我想测试显示ChooserActivity.当我使用LG g2测试时通过.但是,当我使用Nexus 5(Lollipop)测试失败时.

代码如下:

public void testRun() {
    int timeout = 5;

    // Wait for activity: 'course.labs.intentslab.ActivityLoaderActivity'
    assertTrue("course.labs.intentslab.ActivityLoaderActivity is not found!",
            solo.waitForActivity(course.labs.intentslab.ActivityLoaderActivity.class));

    // Click on Implicit Activation
    solo.clickOnView(solo
            .getView(course.labs.intentslab.R.id.implicit_activation_button));
    // Wait for activity: 'com.android.internal.app.ChooserActivity'
    assertTrue("ChooserActivity is not found!",
            solo.waitForActivity("ChooserActivity"));
    // Click on MyBrowser
    solo.clickInList(2, 0);
}
Run Code Online (Sandbox Code Playgroud)

Nexus ScreenShot:

在此输入图像描述

LG G2 ScreenShot:

在此输入图像描述

当给出Nexus上的测试运行错误时,如下所示

Running tests
Test running started
junit.framework.AssertionFailedError: ChooserActivity is not found!
Run Code Online (Sandbox Code Playgroud)

我该怎么办?为什么在Nexus 5上找不到Chooser Activty?

android robotium android-activity android-testing nexus-5

5
推荐指数
1
解决办法
499
查看次数

异常后继续Android测试

在Android Studio中运行我的测试套件时,偶尔会从我的代码中的某个地方抛出一个异常(不在测试中)会导致当前测试失败(因为测试发现了一个错误),其余的都是测试停止运行(不太好).我希望测试继续运行,以便整个套件完成.这可能吗?

android robotium android-testing android-studio

5
推荐指数
1
解决办法
578
查看次数

Android Espresso测试应用程序流程

我使用Espresso来测试很多活动和它们之间的过渡.我想为这些活动编写不同的测试,并将Activity Intents链接到相应的测试用例.

1.活动A(testActivityA运行)2.ActivityA启动ActivityB(testActivity B)应该被调用

是否有可能使用浓缩咖啡或任何其他测试框架?

android automated-tests robotium android-testing android-espresso

5
推荐指数
0
解决办法
1101
查看次数