欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

适用于Android测试自动化的15+种有用的Robotium代码段

程序员文章站 2024-03-22 16:36:04
...

Robotium是一个功能强大的android测试自动化框架。 它可以用于使用单元,功能和自动黑匣子UI测试用例创建强大的应用程序。

当我第一次看Robotium时,它听起来几乎像Selenium(用于Web应用程序)。 尽管名称相似,但它们并不相关。 Robotium由不同的开发人员小组开发。

我尝试了几个android测试库( http://www.javacodegeeks.com/2011/06/android-dependency-injection-testing.html ),但无法完全满足我的应用测试要求。

在Robotium中进行了几个月的编码后,我意识到它是成为android和jenkins持续集成环境的一部分的好人选– http://www.javacodegeeks.com/2012/09/android-and-jenkins-continuous.html

在过去的几周中,我开始探索Robotium的更多深入功能并开始喜欢它。 我曾经是一个Selenium(网络驱动程序)爱好者,并为Web驱动程序收集了一些代码片段 (事实证明,作弊代码很方便:))。 因此,我决定也对Robotium做同样的事情。 我将其用于真实的应用程序测试,并收集了一些常用的代码片段,这些片段可能证明对包括我在内的其他初学者有所帮助。

以下是一些使用robotium框架进行测试的常用代码段。

截图

使用takeScreenshot方法可以轻松拍摄任何android屏幕的快照。

solo.takeScreenshot()

takeScreenshot()方法将图片保存在设备上的“ / sdcard / Robotium-Screenshots /”文件夹中。

这将需要对要测试的应用程序的AndroidManifest.xml中的写入权限(android.permission.WRITE_EXTERNAL_STORAGE)。

检查按钮元素是否存在

通常需要检查按钮是否出现在屏幕上。 找到按钮后,我们可能希望采取进一步的措施。 这可以通过searchButton方法实现。

solo.searchButton("My Beautiful Button", true )

请注意,按钮文本是作为第一个参数提供的,第二个参数指示该方法将返回可见的按钮对象。 如果您也想检查不可见的按钮,则可能需要将其设置为false。

Running Same Test cases on Two Different Devices

通常需要在多个设备上测试android应用。 尽管robotium方面没有特殊要求,但是您可以使用adb命令选项在特定设备上运行它。

adb命令中的-s标志可用于指向特定设备。 当要在两个设备上运行时,可以打开两个终端,然后运行指向两个不同设备的命令。 这将在两个设备中并行运行测试用例。

假设我们要在2个连接的android设备上运行两个不同的测试用例。 以下命令应列出两个设备

adb devices

命令输出

List of devices attached
SER1   device1
SER2   device2

然后使用上面命令输出中显示的***,我们可以在下面的命令中运行:

adb -s SER1 shell am instrument -w -e class com.test.Test1 com.test/android.test.InstrumentationTestRunner

adb -s SERIALOFDEVICE2 shell am instrument -w -e class com.test.Test2 com.test/android.test.InstrumentationTestRunner

哪里

com.test.Test1
com.test.Test2

是我们要在每个设备上运行的测试类。

如何模拟在屏幕Robotium上的长按

可以使用clickLongOnScreen方法进行长按,该方法接受两个参数来表示屏幕上的位置(x,y)。

solo.clickLongOnScreen(10, 15);

适用于Android测试自动化的15+种有用的Robotium代码段

如果不确定图片下方设备屏幕上的x,y坐标可能会有用

如何维护Robotium测试用例的顺序

如果要按特定顺序执行测试用例,则可以使用测试套件。 简单示例如下所示。

public static final MyTest suite() { 
    TestSuite testSt = new TestSuite(); 
    testSt.addTest(new SampleTestCase("one"));
   testSt.addTest(new SampleTestCase("two"));

return testSuite;
}

等待活动完成

在少数测试用例中,可能需要等待活动完成。 您可能要在活动完成后执行测试操作。 可以使用waitForActivity方法来完成此操作。

solo.waitForActivity(solo.getCurrentActivity().toString());

等待吐司出现

没有等待烤面包的直接方法,但是可以通过等待文本(在烤面包内部)出现来使用解决方法

solo.waitForText("Some text inside toast");

等待视图消失

没有直接的方法可以等待视图消失,但是可以通过等待字段变为不可见的条件来使用变通方法。 可以说我们有一个文本视图。 我们可以使用下面的代码片段等待textField变得不可见。

TextView textField = solo.getText("My Text Value", true);
 solo.waitForCondition(new Condition() {
@Override
public boolean isSatisfied() {
return textField.getVisibility() == View.INVISIBLE;
}
}, 1000);

注意,我们在这里使用了匿名类实现。 如果经常使用此代码段,则始终可以为该类创建一个类。

有条件的等待–就像上面的例子一样,我们可以在等待方法上指定自定义条件,这对自定义可编程等待配置确实很有帮助。 下面是等待条件方法的签名。 它还有一个超时字段,该字段可以是条件等待时间的上限。

solo.waitForCondition(Condition condition, int timeout);

等待片段

等待片段是robotium中受支持的方法。 只需要调用waitForFragmentByTag方法

solo.waitForFragmentByTag("MyTag");

上面的代码段等待与指定标签(MyTag)匹配的片段。

solo.waitForFragmentByTag("MyTag", 100);

上面的代码片段将等待长达100ms的片段并继续执行。

如何在文本视图中验证文本值

TextView textV = solo.getText("My Expected Value");

// if textV is not null than may be we do not need next line.

assertEquals("My Expected Value", textV.getText().toString());

如何隐藏软键盘

隐藏软键盘是一种常见的需求,而robotium也有一种方法。简单地调用hideSoftKeyboard方法可以隐藏软键盘。

solo.hideSoftKeyboard();

如何导航回去

使用robotium可以轻松返回上一屏幕。 只需使用back()方法。

solo.goBack();

如何检查设备上是否有足够的内存

有一个专用的方法来验证可用内存是否被android系统认为不低

solo.assertMemoryNotLow();

如何使用Robotium API清除日志文件

使用长时间运行的测试用例和占用设备内存的大量日志文件时,使用robotium clearLog方法清除日志文件特别有用。

solo.clearLog();

如何从可编辑的文本字段中删除文本

您可以使用以下代码从EditText字段中清除文本

solo.clearEditText(editText object);

如何覆盖可编辑文本字段中的更新/输入文本

下面的方法调用将覆盖EditField的现有内容

solo.enterText(editText, "new value on field");

如何在可编辑的文本字段中附加文本

没有将文本追加到EditText字段的专用方法,因此您可能需要通过提取旧值并将新值追加到它来完成此操作。

solo.enterText(editText, editText.getText() + "new value on field");

如何在日期选择器对象中设置日期

我们可以使用setDatePicker方法在使用Robotium的应用上设置特定日期

solo.setDatePicker(datePicker, 2014, 1, 5)

在指定的DatePicker中设置日期(2014年4月1日)。

摘要

我的应用程序测试用例主要针对本机android应用程序,因此这些代码段对本机应用程序更有用。 我确信混合应用程序也可能具有类似的功能。 随意提出更多摘录,它可以成为非常方便的资源。

我希望您发现这篇文章有用,不要忘记分享或收藏此页面。

如果您喜欢此功能,请订阅我们的时事通讯,以享受每周更新和免费白皮书! 另外,请访问JCG学院进行更高级的培训!

参考文献:

官方网站: http : //code.google.com/p/robotium/

常见问题

我建议您在任何论坛上发布问题之前,先浏览FAQ页面。

论坛

官方讨论区,提出与机器人有关的问题:

翻译自: https://www.javacodegeeks.com/2014/06/15-useful-robotium-code-snippets-for-android-test-automation.html