Robotium的例子

时间:2010-02-22 16:33:59

标签: android testing instrumentation robotium

我找到了一个名为Robotium的仪器测试工具。它对于Android应用程序的黑盒测试来说简单易行。 我们可以按如下方式使用它:

    solo.clickOnText("Other");
    solo.clickOnButton("Edit");
    assertTrue(solo.searchText("Edit Window"));
    solo.enterText(1, "Some text for testing purposes")
    solo.clickOnButton("Save");
    assertTrue(solo.searchText("Changes have been made successfully"));
    solo.clickOnButton("Ok");
    assertTrue(solo.searchText("Some text for testing purposes"));

任何人都可以对此有更多了解吗?  任何人都可以告诉我们如何将它用于webviews和listviews等。

5 个答案:

答案 0 :(得分:15)

有关Robotium支持的常见问题和解答,请参阅质量检查维基页面:http://code.google.com/p/robotium/wiki/QuestionsAndAnswers

另请访问“使用入门”页面:http://code.google.com/p/robotium/wiki/Getting_Started

在那里,您将找到一个示例测试项目,您可以下载并查看想法。您也可以从http://code.google.com/p/robotium/downloads/list下载javadoc,看看目前有哪些功能。

有关教程,请访问:http://code.google.com/p/robotium/wiki/RobotiumTutorials

此致 Renas

答案 1 :(得分:14)

我可以说,你无法用Robotium做什么:)

  1. 跨活动测试,Robotium只能使用相同的证书应用程序,否则您将获得注入事件异常(例如,您无法对屏幕键盘进行点击)

  2. Robotium没有处理预期/意外警报/ popus /对话的机制。例如,iOs javascript测试具有非常简单的布尔标志和用于处理警报的回调

  3. Robotium在自动滚动方法(可能目前已修复)方面存在很大问题,例如,如果您要查找未显示的文本,Robotium将在滚动视图的末尾堆叠并生成assertTrue( false)停止滚动

  4. Robotium具有assertTrue(false)逻辑,用于报告问题/意外情况,而不是返回一些Enum值或布尔值(成功/失败),因此对于每周7天,每天24小时运行的良好压力测试,您需要添加自己的方法不会停止测试,只是处理'方法无法点击xy'结果值

  5. 您需要实现一些逻辑来单击滚动/列表视图中的项目。由于Robotium点击了视图的中心,当你尝试点击仅显示20%部分的视图时,你总会得到异常或assertTrue(false)

  6. 一般来说,Robotium非常酷,乐于助人,我非常喜欢:)我无法想象没有这个伟大图书馆的生活!

答案 2 :(得分:2)

searchText方法也搜索ListViews。您可以将它与断言一起使用,以确保ListView包含正确的内容

答案 3 :(得分:1)

要点击列表。如果您的活动是ListActivity类型,则可以将clickInList与一个参数一起使用,该参数是应该单击的行的索引。在其他情况下,使用带有两个参数的clickInList - listview屏幕索引和行号。 对于WebView,如果您加载页面,则应使用waitForText()mathod来检查内容。

更多示例:http://bitbar.com/blog/54/automated-ui-testing-android-applications-robotium

答案 4 :(得分:0)

  • 浏览

对于listViews,您可以使用以下方法solo.getCurrentListViews()在当前屏幕上返回许多列表视图,然后从中迭代或获取其他对象类型( android widgets )例如,您需要从屏幕上的所有列表中单击图像视图,这不会将您重定向到另一个活动,只会更改其他对象的状态:

ArrayList<ListView> lw = solo.getCurrentListViews(); // get all list views
// logging to logcat
Log.i("stats", "number of list views on the current screen: " + aLw.size());
if (aLw.size() != 0) 
for (ListView l: aLw) {
    // Take all image views from list and click each
    ArrayList <ImageView> aIw = solo.getCurrentImageViews(l);
    Log.i("stats", "list view " + l + " contains " + iw.size() + " image views.");
    if (aIw.size() != 0)
    for (int i = 0; i < aIw.size(); ) {
         // clicking
         solo.clickOnView(aIw.get(i));
         Log.i("click", "image view " + i " clicked."); 
    }
}

您可以键入文本到 editText 视图或从textViews获取文本。 您可以将Robotium与Java和Android API结合使用。例如,使用 getVisibility()方法检查屏幕上图像的可见性,并将其与三个主要状态 View.GONE View.VISIBLE 进行比较, View.INVISIBLE 。或者,您可以在执行测试之前使用Java方法 HttpURLrequest 检查连接。

  • 其他

如果您有源,您可以从任何布局中获取知道其ID的对象!还存在许多令人敬畏的内容,例如solo.waitForActivity()solo.assertMemoryNotLow()solo.takeScreenShot()

您可以通过加入Robotium community找到有关 Robotium 用法的更多示例。