访问Android UI Automator测试的资源

ste*_*eha 4 java android localization android-uiautomator

我正在使用Android上的UI Automator进行一组测试。我有它的工作,但我目前的测试是用很多字符串文字进行的。

当我刚开始尝试使事情正常工作时,字符串字面值还不错,但是今后它们会很不好。如果更改了应用程序,则字符串文字需要进行更改以匹配。同样,愚蠢的是我的测试必须完全重做才能测试其他语言的本地化版本。

该应用程序本身具有存储在资源中的所有字符串。每个字符串都有一个不变的标识符...这是一个示例:

<string name="more_options">More options</string>
Run Code Online (Sandbox Code Playgroud)

应用程序代码将始终使用名称more_options来查找字符串资源,而不是硬编码"More options"到代码中。

所以我想要的是导入所有字符串资源,将它们存储在某种map对象中,然后在我的UI Automator测试代码中使用类似的东西,m.get("more_options")而不是像"More options"现在那样使用文字字符串。

无论我做什么,我都希望它只是生成并推送到设备以运行测试的JAR文件的一部分。例如,我不想将XML字符串资源文件推送到设备并尝试在测试运行时读取它们。我想在构建JAR文件时内置数据。

我查看了通过构建应用程序生成的文件,并且类似的名称more_options都被设置为整数。这些必须是资源存储中的索引或指针,但是我不确定如何将该存储复制到我的UI Automator项目中并使其连接起来。在Android应用中,您使用Context对象访问资源,而UI Automator JAR文件没有Context

这必须是一个普遍的问题,人们必须已经解决了这个问题,但是我的Google搜索尚未找到有关人们如何解决此问题的任何讨论。

如果没有任何建议,我将编写一个Python脚本,该脚本导入XML文件,并编写一个Java文件,该Java文件具有构建所需地图的功能,然后从UI Automator测试程序中调用它。(无论如何,我有一个运行命令行工具序列的Python脚本来执行UI Automator测试……我不介意使它做更多的工作。)但是我认为应该有一个纯Java解决方案为此,可能涉及从应用程序的源目录中抓取已编译的文件。

小智 5

您可以获得上下文:

val context = InstrumentationRegistry.getTargetContext()
Run Code Online (Sandbox Code Playgroud)

然后在您的测试中:

context.getString(R.string.more_options)
Run Code Online (Sandbox Code Playgroud)