我是使用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
我正在尝试编写黑盒自动化测试来断言"确保登陆页面在启动应用程序的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) Robotium中的Solo类上的waitForCondition()使用Sleeper对象在检查条件之间休眠线程.Sleeper类的PAUSE定义为500毫秒.我想降低它,理想情况下不需要下载Robotium源代码,更改它,并重新编译Robotium.
我尝试扩展Solo类并构建我自己的Waiter类,该类将使用具有较低睡眠间隔的自定义Sleeper对象,但Waiter具有包级访问权限,因此此路由不可用.
除了最后的关键字,这个提交消息似乎表明自定义配置应该(或即将到来),但我没有看到任何方法在Solo.Config类中自定义这些常量.
有没有人有任何解决方案?谢谢!
更新: @ vRallev在下面的答案通过反射完成工作.我做了一个拉动请求,今天合并到了Robotium.在下一个版本中,您将能够使用Config类配置休眠时间.
我最近一直试图获取屏幕截图,但是每个东西都是徒劳的,文件夹是在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) 我正在尝试使用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) 我是Android应用程序测试的新手.我使用java代码创建了一个自动化框架.然后我尝试将框架与现有的Robotium测试应用程序集成.但是当我给Run as
- >时Android Junit
,测试应用程序安装成功,但它会引发异常Exception during Suite construction.
- 我有两个java类 - 例如Class1_Functional
库和Class2_Automation
框架.我在Class2_Automation Framework
Robotium框架内创建了一个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) 我开始开发一个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 Studio中运行我的测试套件时,偶尔会从我的代码中的某个地方抛出一个异常(不在测试中)会导致当前测试失败(因为测试发现了一个错误),其余的都是测试停止运行(不太好).我希望测试继续运行,以便整个套件完成.这可能吗?
我使用Espresso来测试很多活动和它们之间的过渡.我想为这些活动编写不同的测试,并将Activity Intents链接到相应的测试用例.
1.活动A(testActivityA运行)2.ActivityA启动ActivityB(testActivity B)应该被调用
是否有可能使用浓缩咖啡或任何其他测试框架?
android automated-tests robotium android-testing android-espresso