Uiautomator "am start"

6

请问有谁知道如何在代码中调用
am start -a ACTIVITY命令。
或者是否可能直接从junit代码中启动活动。

3个回答

6

以下是我用来从.jar文件启动活动的示例:

private boolean startSettings() {
    try {
        Runtime.getRuntime().exec(
                "am start -n com.android.settings/.Settings");
        sleep(1000);
    } catch (IOException e) {
        e.printStackTrace();
    }
    for (int i = 0; i < 5; i++) {
        sleep(1000);
        if (getUiDevice().getCurrentPackageName().contains(
                "com.android.settings")) {
            return true;
        }
    }
    return false;
}

您可以修改代码来启动任何应用程序。您还可以通过添加包/活动值参数使该方法更加通用。

我已经尝试了 am start -n com.app.myapp/.MainActivity,但是不起作用。即使使用完全限定名称也不行。但是从命令提示符中运行 adb shell am start -n com.app.myapp/.MainActivity 是有效的。有任何想法吗? - Mahendran
我不知道为什么会发生这种情况。我定义了一个启动应用程序的方法,并且使用上述代码没有任何问题。 您可以尝试使用uiautomator的Python版本:https://github.com/xiaocong/uiautomator 我已经使用它一段时间了,效果非常好。然后,您可以使用Python subprocess.Popen()运行“adb shell am start”命令。 - Gabriel Porumb

5
这应该是下面的代码。我在我的测试中使用了它。
UiDevice device = UiDevice.getInstance(getInstrumentation());
final String TARGET_PACKAGE =
        InstrumentationRegistry.getTargetContext().getPackageName();

Context context = InstrumentationRegistry.getContext();
final Intent intent = context.getPackageManager().getLaunchIntentForPackage(TARGET_PACKAGE);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
device.wait(Until.hasObject(By.pkg(TARGET_PACKAGE).depth(0)), 5000);

0
我所做的是将启动应用程序并运行您的UIAutomator测试作为构建的一部分。这就是我在构建Ant build.xml后运行UIAutomator测试的方式。此片段添加到build.xml末尾,会使您的应用程序开始运行,然后启动您的UI测试。使用Eclipse,请确保右键单击build.xml,然后选择“Run As”->“Ant Build ...”,并确保选择了正确的目标:“build”、“install”、“start”、“mytest”。通过以下片段添加目标“start”和“mytest”。
<!-- version-tag: VERSION_TAG -->
<!-- This line should already be at the end of build.xml -->
<import file="${sdk.dir}/tools/ant/uibuild.xml" />

<target name="start" description="Start App" depends="build, install">
    <echo>Starting Navigation Example</echo>

    <exec executable="${adb}" failonerror="true">
        <arg value="shell" />
        <arg value="am" />
        <arg value="start" />
        <arg value="-n" />
        <arg value="com.example.android.navigationdrawerexample/.MainActivity" />
    </exec>
</target>

<target name="mytest" description="Runs UI tests" depends="build, install, start">
    <echo>Running UI Tests</echo>
    <exec executable="${adb}" failonerror="true">
       <arg value="shell" />
       <arg value="uiautomator" />
       <arg value="runtest" />
       <arg value="${out.filename}" />
       <arg value="-c" />
       <arg value="com.example.android.navigationdrawerexample.MainTestCase" />
   </exec>
</target>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接