关于Appium无法运行带有SplashActivity的Xamarin Forms应用的技术咨询
我之前在做Xamarin Forms应用的Appium自动化测试时,也碰到过和你一模一样的问题——带SplashActivity的应用死活启动不了,不带的却完全正常。你的报错信息:
my.company.package.crc647d31b46756051f61.SplashActivity' never started[ADB] Incorrect package and activity. Retrying.
其实本质是Appium和Xamarin的闪屏页启动逻辑不兼容导致的,分享几个我亲测有效的解决方案:
确认Appium Capabilities里的Activity配置准确
Xamarin会对Activity类名做混淆处理(就是那个crc64开头的奇怪名称),手动写很容易出错。你可以通过ADB命令获取当前运行的Activity全路径:adb shell dumpsys window | grep mCurrentFocus先手动启动应用,等闪屏页加载完成后执行这个命令,拿到正确的Activity名称,替换到
appActivity参数里。设置等待目标Activity而非闪屏页
闪屏页本身是临时页面,很快会跳转到主Activity。你可以在Capabilities里添加appWaitActivity参数,指定闪屏后要进入的主Activity(比如my.company.package.MainActivity),同时调整appWaitDuration延长等待时间(比如设为30000,也就是30秒),这样Appium会跳过闪屏页的检测,直接等待主Activity加载完成。检查Xamarin闪屏页的代码逻辑
有时候是闪屏页的启动代码有问题,导致Appium无法正确检测到页面切换。确保你的SplashActivity在启动主Activity后调用了Finish()方法,比如:protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 启动主Activity StartActivity(typeof(MainActivity)); // 销毁闪屏页,让Appium能检测到主Activity Finish(); }如果闪屏页里有异步操作(比如加载资源),要确保这些操作完成后再启动主Activity,避免Appium在闪屏页还没跳转时就判定启动失败。
调整Appium的启动参数
尝试开启autoGrantPermissions: true让Appium自动处理权限弹窗,同时设置noReset: false重置应用状态,避免之前的缓存影响启动。这两个参数有时候能解决一些隐性的启动阻塞问题。
内容的提问来源于stack exchange,提问作者Visual Sharp

