如何在Appium测试用例中使用带参数的adb发送广播?

时间:2016-06-23 05:04:44

标签: java android junit adb appium

我的测试用例很简单。我的应用程序中有一个条件,每当收到推送通知时,我需要根据我在Android设备上本地存储的参数检查附加项中的参数。如果这些参数值不匹配,我应该忽略推送通知,否则我会在设备上显示它。

所以现在我已经实现了所有功能并经过测试才能正常工作我想编写一个测试用例,以便将来我可以自动化测试。我使用Appium的eclipse JUNIT测试用例来自动化测试。在测试时,我使用adb来触发推送通知,因为它更容易。这是我用来从终端触发它的命令..

adb shell am broadcast -a com.google.android.c2dm.intent.RECEIVE -n package.name/com.google.android.gms.gcm.GcmReceiver --ei "pw_msg" 1

..按预期工作。在我的Appium测试用例中,我就是这样的..

Runtime.getRuntime().exec("adb shell am broadcast -a com.google.android.c2dm.intent.RECEIVE -n package.name/com.google.android.gms.gcm.GcmReceiver --ei \"pw_msg\" 1");

..似乎没有触发推送通知。我可以确认我可以从Appium测试用例中执行adb命令,因为

之类的命令
Runtime.getRuntime().exec("adb shell svc data disable")
Runtime.getRuntime().exec("adb shell am start -n package.name/package.name.MainActivity")

工作正常。广播adb命令有什么问题?我写错了吗?或遇到某种限制或其他什么?

1 个答案:

答案 0 :(得分:0)

经过一番工作后,我解决了这个问题。首先,我像这样阅读终端的输出..

final Process exec = Runtime.getRuntime().exec("adb shell am broadcast -a com.google.android.c2dm.intent.RECEIVE "
                + "-n facilit.net.mobile.debug/com.google.android.gms.gcm.GcmReceiver "
                + "--ei \"pw_msg\" 1");

        final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(exec.getInputStream()));

        String s;
        while((s = bufferedReader.readLine()) != null) {
            System.out.println(s);
        }

这让我可以看到终端的输出,如..

  

广播:意图{act = com.google.android.c2dm.intent.RECEIVE   CMP = package.name / com.google.android.gms.gcm.GcmReceiver   (有额外的)}广播完成:结果= 404

通常404表示命令中存在格式错误。我所要做的就是纠正格式化。