【问题标题】:Appium-Activity used to start app doesn't exist or cannot be launched! Make sure it exists and is a launchable activity用于启动应用的 Appium-Activity 不存在或无法启动!确保它存在并且是可启动的活动
【发布时间】:2018-10-25 20:53:05
【问题描述】:
我正在尝试使用 appium 运行在 eclipse 上创建的测试文件。当我在连接到系统的真实 android 设备上执行测试时,出现以下错误:
运行命令时遇到内部错误:
错误:启动应用时出错。
原始错误:用于启动应用程序的活动不存在或无法启动!确保它存在并且是可启动的活动。
应用程序在模拟器上手动打开正常,所以我不确定真实设备有什么问题。
【问题讨论】:
标签:
android
android-emulator
appium
【解决方案1】:
问题不言自明:您要么没有提供活动来识别您的应用,要么您指定了错误的应用。
你可以做什么:
- 将设备连接到笔记本电脑,确保 adb 调试已打开
- 手动安装您的应用并启动它
- 在终端运行中:
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
- 检查输出,你会得到类似的东西:
com.yourcompany.package/com.yourcompany.package.login.view.LoginActivity
所以现在你有了应该提供 Appium 的包 - com.yourcompany.package 和活动 com.yourcompany.package.login.view.LoginActivity。
- 添加新功能,全套应如下所示:
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "device");
capabilities.setCapability("app", pathToApk);
capabilities.setCapability("platformName", "android");
capabilities.setCapability("appWaitPackage", "com.yourcompany.package");
capabilities.setCapability("appWaitActivity", "com.yourcompany.package.login.view.LoginActivity");
在多个真实设备上非常适合我
【解决方案2】:
像@dmle 所说的那样手动检查您的应用,
- 在 Android 上打开应用
- 转到终端、控制台、命令行(随便)
- 应该安装adb,
- 在终端输入
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp
该命令将提供当前的包和活动。
也许开发人员更改了您的包 ID。
【解决方案3】:
我按照指南here
-
在终端输入以下命令(尚未执行)
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
-
在设备上手动打开应用,执行上面的命令,很快就找到了startActivity。
-
从 mFocusedApp 复制 Package 和 Activity 的值=
-
检查 Activity 是否可以启动
adb shell am start -n package.android/.activity.SplashActivity
-
能力集
DesiredCapabilities 能力 = new DesiredCapabilities();
capabilities.setCapability("device", "Android");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName", "Galaxy Note9");
capabilities.setCapability("appWaitPackage", "package.android");
capabilities.setCapability("appWaitActivity", ".activity.SplashActivity");
capabilities.setCapability("appPackage", "package.android");
capabilities.setCapability("appActivity", ".activity.SplashActivity");
capabilities.setCapability("appWaitDuration", 10000);//this is way optional, 20000 by default
capabilities.setCapability("app", newApp.getAbsolutePath());
【解决方案4】:
我总是收到“遇到内部错误运行命令:错误:应用程序在”“不存在或不可访问”我使用 Driver wait 并解决了。