我正在使用 Android 上的 UI Automator 进行一组测试。我有它的工作,但我目前的测试是用大量的字符串文字进行的。
当我刚开始尝试让事情正常工作时,字符串文字很好,但以后它们会很糟糕。如果应用程序发生更改,则需要更改字符串文字以匹配。此外,我的测试必须完全重做才能测试其他语言的本地化版本,这很愚蠢。
应用程序本身将所有字符串都存储在资源中。每个字符串都有一个不变的标识符......这是一个例子:
<string name="more_options">More options</string>
应用程序代码将始终使用名称more_options
来查找字符串资源,而不是硬编码"More options"
到代码中。
所以我想要的是导入所有字符串资源,将它们存储在某种地图对象中,然后在我的 UI Automator 测试代码中使用类似的东西,而不是像现在这样m.get("more_options")
的文字字符串。"More options"
无论我做什么,我都希望它只是 JAR 文件的一部分,该文件被构建并推送到设备以运行测试。例如,我不想将 XML 字符串资源文件推送到设备并尝试在测试运行时读取它们。我想在构建 JAR 文件时内置数据。
我查看了通过构建应用程序生成的文件,并且名称more_options
只是设置为整数。这些必须是指向资源存储的索引或指针,但我不确定如何将该存储复制到我的 UI Automator 项目中并将其连接起来;在 Android 应用程序中,您使用Context
对象来访问资源,而 UI Automator JAR 文件没有Context
.
这一定是一个普遍的问题,人们一定已经解决了,但我的谷歌搜索没有发现任何关于人们如何解决这个问题的讨论。
如果我没有得到任何建议,我将编写一个 Python 脚本来导入 XML 文件并编写一个 Java 文件,该文件具有构建我需要的地图的功能,然后从我的 UI Automator 测试程序中调用它。(无论如何,我有一个 Python 脚本,它运行一系列命令行工具来启动 UI Automator 测试......我不介意让它做更多的工作。)但我认为应该有一个纯 Java 解决方案为此,可能涉及从应用程序的源目录中抓取已编译的文件。