在Xamarin UiTest中代码控制WiFi开关遇Java.Interop异常求解决
在Xamarin.UiTest中代码控制WiFi启用/禁用的解决方案
我之前也踩过一模一样的坑——直接在UiTest里调用Android原生API控制WiFi会碰到一堆麻烦,比如你遇到的程序集引用错误,就算把这个问题搞定了,还会卡在权限不足的问题上。这是因为UiTest的运行环境和你的应用本身是完全分开的,它是作为外部测试进程去操控设备,不是在应用内部执行代码,所以直接用Android.App.Application.Context这条路根本走不通。
给你一个更靠谱的方案:利用Xamarin.UiTest提供的ExecuteShellCommand方法,直接执行adb shell命令来控制WiFi,完全避开应用内代码的依赖和权限问题。
具体代码示例
// 启用WiFi app.Device.ExecuteShellCommand("svc wifi enable"); // 禁用WiFi app.Device.ExecuteShellCommand("svc wifi disable");
为什么这个方法可行?
- 不需要引用任何Android相关的程序集,也就不会出现
Java.Interop这类依赖找不到的问题; svc wifi是Android系统自带的shell命令,专门用来管控WiFi状态,只要你的测试设备(模拟器或真机)开启了adb调试,就能直接执行;- 绕开了应用权限限制:原来的方法需要应用拥有
CHANGE_WIFI_STATE权限,而且UiTest进程本身也拿不到这个权限,用shell命令则是直接借助系统权限完成操作。
注意事项
- 如果用的是未root的真机,需要在设备上开启「允许adb调试」,并且同意弹出的调试授权提示;
- 模拟器一般默认支持这个命令,不需要额外配置。
再聊聊你之前的问题
你之前的代码报错找不到Java.Interop,本质是UiTest项目的依赖环境和Android应用项目不一致,强行引用Mono.Android会导致依赖冲突。而且就算解决了引用问题,运行时也会因为UiTest进程没有修改WiFi状态的权限而失败,所以这条路从一开始就不适合UiTest的场景。
内容的提问来源于stack exchange,提问作者Franklin84
相关产品推荐
相关产品推荐

