七、其他 Robotium 工具

本章由机器人框架中的各种实用程序组成。这些实用程序包括RobotiumUtils类、XPath 用法、已经安装的 Android 应用的 Robotium 用法,以及执行测试的应用签名-取消签名操作过程中涉及的签名过程。让我们在本章中逐一查看这些实用程序。

机器人应用类

RobotiumUtils类在机器人版本 4.2 中引入。它包含实用方法。让我们看看为类RobotiumUtils设置的 API。

The RobotiumUtils class

API 集

RobotiumUtils类提供了排序、排序、过滤视图等方法。提供这些功能的不同方法如下:

  • 以下方法基于作为参数传递的类过滤视图:

    java RobotiumUtils.filterViews(Class classToFilterBy, Iterable viewList)

  • 以下方法过滤所有不在classSet参数中的视图:

    java RobotiumUtils.filterViewsToSet(Class<android.view.View>[] classSet, Iterable<android.view.View> viewList)

  • 以下方法检查视图是否与stringToMatch变量匹配,并返回找到的匹配数:

    java RobotiumUtils.getNumberOfMatches(String stringToMatch, TextView targetTextView, Set<TextView> textviewList)

  • 以下方法删除所有可见性不可见的视图:

    java RobotiumUtils.removeInvisibleViews(Iterable viewList)

  • 以下方法根据视图在屏幕上的位置对所有视图进行排序:

    java RobotiumUtils.sortViewsByLocationOnScreen(List viewList)

  • 下面的方法筛选视图集合,并返回与指定正则表达式匹配的视图。

    java RobotiumUtils.filterViewsByText(Iterable viewList, string regex)

您可以从以下链接获得有关这些方法的更多信息:

http://robotics . Google code . com/SVN/doc/com/jaywy/Android/robotics/solo/roboumstyle . html

XPath API 和语法

通过使用 XPath 样式的表达式,可以定位网页元素。这有助于测试人员找到 DOM 的元素,同时保持测试抵抗应用用户界面。请注意,这仅适用于网络视图应用中的网络元素。

XPath API and syntax

XPath 基本上用于在 XML 文档中导航属性和元素。一个简单的路径表达式可以用来使用 XPath 在 XML 文档中导航。

让我们看一个简单的例子,它提供了对如何使用 XPath 的基本理解:

下面是我们必须使用 XPath 解析的 XML 文件:

<?xml version="1.0"?>
<catalog>
  <book id="z24">
  <author>Hrushikesh</author>
  <title>Robotium Automated Testing For Android</title>
  <genre>Computer</genre>   
  <description>Efficiently automate test cases for Android applications using Robotium </description>
  </book>

  <book id="az24">
  <author>Bharati</author>
  <title>Mathematics MHTCET</title>
  <genre>Objective</genre>
  <description>A comprehensive guide to Mathematics for MHTCET</description>
  </book>
</catalog>

假设您想从前一个 XML 文件中提取作者的名字。使用 XPath 的功能如下:

private void parseDataUsingXPath() {
  // create an InputSource object from /res/xml
  InputSource inputSrc = new InputSource(getResources().openRawResource(R.xml.data));

  // Instantiate the XPath Parser instance
  XPath xPath = XPathFactory.newInstance().newXPath();

  // Create the xpath expression
  String xPathExpression = "//author";

  // list of nodes queried
  NodeList nodes = (NodeList)xpath.evaluate(expression, inputSrc, XPathConstants.NODESET);

  // if author node found, then add to authorList i.e. the list of authors instantiated in the activity where this function is used
  if(nodes != null && nodes.getLength() > 0) {
    int len = nodes.getLength();
    for(int i = 0; i < len; ++i) {
      Node node = nodes.item(i);
      authorList.add(node.getTextContent());
    }
  }
}

您可以使用以下 XPath 表达式示例来查找网页元素:

solo.getWebElement(By.xpath("//*[@id='nameOfelementID']/tbody/tr[11]/td[2]/input[1]"), 0);
where By.xpath(<path expression>, index);

用于预装应用的机器人

Robotium 允许为安卓系统中预先安装的应用编写和运行测试用例。为此,您需要使用用于测试项目的调试密钥对目标应用执行重新签名操作。这需要访问设备上的/system/app文件夹。要访问此文件夹,您必须有根设备。

Robotium for pre-installed applications

请注意,执行重新签名操作的某些预安装应用无法正常工作。当使用新的调试密钥重新签名时,这些应用甚至不会出现。

要重新签署 APK 文件,您可以按照下列步骤操作:

  1. 以 root 用户身份登录:adb root
  2. 使用以下代码

    java adb remount adb pull /system/app/ApplicationName.apk

    重新安装 3. 重新签署ApplicationName.apk文件,使其具有与adb pull /data/system/packages.xml测试项目相同的证书调试密钥签名签署。 4. 打开packages.xml并删除以下代码:

    java <package name="com.ApplicationName"> ..... </package>

  3. packages.xml推回adb push packages.xml /data/system装置。

  4. 重新启动您的设备。
  5. 将重新签署的ApplicationName.apk文件推回到adb push ApplicationName.apk /system/app设备。

仅测试 APK

待测试的 APK 文件应具有与测试项目相同的证书签名。如果签名不同,就会出现不匹配。

Test for only APK

  • 如果您知道 APK 证书签名,请用相同的签名在测试项目上签名。
  • 如果 APK 没有签名,用安卓调试密钥签名在 APK 签名。
  • 如果您不知道 APK 证书签名,请删除它的证书签名,并将调试密钥签名提供给 APK 和您的测试项目。

签名流程

在安卓操作系统中,所有的应用都用证书签名,证书的私钥由应用开发者持有。

有两种构建模式来构建您的安卓应用。它们如下:

  • 调试方式
  • 释放模式

安卓构建过程根据构建模式的类型对应用进行签名。调试模式主要用于开发和测试应用,而发布模式用于向用户分发应用的发布版本,或者在市场上发布应用,如 【谷歌 Play 商店】

Signature process

当您使用构建模式时,Keytool实用程序用于创建调试密钥。调试密钥的别名和密码对于 SDK 构建工具是已知的。这就是为什么每次编译程序时,工具不会提示您输入调试密钥的别名和密码。

当您在发布模式下构建应用时,将使用私钥。如果您没有私钥,则Keytool实用程序会为您创建一个。当您的应用在发布模式下编译时,构建工具使用您的私钥以及jarsigner实用程序来签署应用 APK 文件。

每当您在安装了 ADT 插件的情况下使用 Eclipse 调试或运行应用时,调试密钥签名过程都会在后台自动进行。当使用启用了调试选项的 Ant 脚本来构建应用时,也会遵循相同的签名过程。 Eclipse 导出向导有助于自动化发布签名过程,或者修改 Ant 构建脚本和使用发布选项构建应用。

要取消签名 APK 然后用调试密钥签名,请执行以下步骤:

  1. 使用任何 zip 解压缩器解压缩 APK 文件。
  2. 删除Meta-INF文件夹。
  3. 将提取的文件重分类为 APK 文件,并将扩展名从appname.apk.zip更改为appname.apk。这样,你就可以取消签署 APK!
  4. 要使用安卓调试签名密钥对这个 APK 进行签名,请在命令提示符下运行以下命令:

    ```java

    jarsigner -keystore ~/.android/debug.keystore -storepass android -keypass android appname.apk androiddebugkey

    zipalign 4 appname.apk tempappname.apk ```

jarsigner实用程序可以在 JDK 二进制文件下找到,而 zipalign 是安卓软件开发工具包的一部分。

zipalign 工具用于优化安卓 APK 文件。其基本目的是使未压缩的数据相对于文件的开头对齐。

在 Eclipse 的帮助下,您还可以签署和导出您的安卓应用。请执行以下步骤:

  1. 右键点击安卓项目,导航至安卓工具 | 导出签名应用包
  2. 导出安卓应用向导中,选择想要导出的项目,然后点击下一步
  3. 将出现密钥库选择屏幕。
  4. 如果您没有现有的密钥库,请创建一个新的密钥库。您应该能够通过输入位置和密码来创建密钥库。
  5. 导航到您要使用的文件夹后,在文件浏览窗口的文件名:字段中键入一个名称,例如hrushikesh.keystore。然后,您应该能够继续创建密钥。

关于 APK 签约的更多信息,请参考以下链接:

http://developer . Android . com/tools/publishing/app-signing . html

总结

在本章中,您了解了机器人框架中存在的不同实用程序及其用法。在下一章中,我们将看到 Robotium 与 Maven 的集成机制,并提供一些示例。