我这样做是为了使用 Android UIAutomator 退出应用程序。
assertTrue("Back button can't be pressed", getUiDevice().pressBack());
assertTrue("Back button can't be pressed", getUiDevice().pressBack()); // This line will giving exception.
当我们按两次后退按钮时,我的应用程序将退出,这就是我调用它两次的原因。
但是
然后它会给我例外。
但是当我手动回来两次时,它会完美地运作。
例外是:
junit.framework.AssertionFailedError: Back button can't be pressed
at com.android.jdsu.automation.youtube.YoutubeUiTest.exitApplicaion(Yout
ubeUiTest.java:487)
at com.android.jdsu.automation.youtube.YoutubeUiTest.testYouTube(Youtube
UiTest.java:208)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAuto
matorTestRunner.java:160)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutoma
torTestRunner.java:96)
at com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.ja
va:91)
at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:243)
at dalvik.system.NativeStart.main(Native Method)
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testYouTube
INSTRUMENTATION_STATUS: class=com.android.jdsu.automation.youtube.YoutubeUiTest
INSTRUMENTATION_STATUS: stack=junit.framework.AssertionFailedError: Back button
can't be pressed
at com.android.jdsu.automation.youtube.YoutubeUiTest.exitApplicaion(Yout
ubeUiTest.java:487)
at com.android.jdsu.automation.youtube.YoutubeUiTest.testYouTube(Youtube
UiTest.java:208)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAuto
matorTestRunner.java:160)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutoma
torTestRunner.java:96)
at com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.ja
va:91)
at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:243)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
Ya我也经历过同样的问题,但是没有理解这种情况发生的原因。 我按照以下方式使用它:
UiDevice device = UiDevice.getInstance();
device.pressMenu();
这对我来说很好。
否则,您也可以使用keyevent
,如下所示:
Runtime.getRuntime().exec("/system/bin/input keyevent 82");
答案 1 :(得分:1)
assertTrue("Back button can't be pressed", getUiDevice().pressBack());
如果在pressBack()
之后UI未发生变化,它将返回false,如果当前在主视图中,它将在getUiDevice().pressBack());
之后返回false
答案 2 :(得分:1)
基于此,至少在我们信任Appium的情况下,我们不能信任UIDevice.pressBack()
。
奇怪的是,它大多数时候都可以工作并且实际上返回true。以我的经验,它可以与Intent Chooser,Google Drive,Google Play Store一起使用,但不能与API 19上的“设备设置”一起使用。到目前为止,我拥有这一点,这比Appium的解决方案更为严格:
@RequiresApi(VERSION_CODES.JELLY_BEAN)
public static void pressBackExternal() {
UiDevice device = UiDevice.getInstance(getInstrumentation());
if (VERSION.SDK_INT == VERSION_CODES.KITKAT
&& "com.android.settings".equals(device.getCurrentPackageName())) {
// fails because pressBack sometimes returns false even though the Settings is closed.
device.pressBack();
} else {
assertTrue("expected to press Back button", device.pressBack());
}
}
答案 3 :(得分:0)
有趣的是,您是否尝试在两次通话之间添加等待时间。您的应用程序可能需要一些时间来重新加载上一个活动添加至少500毫秒或1秒的等待时间。