Xamarin.UITests Android 设备未检测到或不工作
Posted
技术标签:
【中文标题】Xamarin.UITests Android 设备未检测到或不工作【英文标题】:Xamarin.UITests Android Device Not Detected or Not Working 【发布时间】:2014-11-21 15:34:33 【问题描述】:我无法在任何 android 模拟器/模拟器上运行 Xamarin.UITests。有什么建议么?尝试时出现以下错误:
谷歌模拟器:
SetUp:System.Exception:未经激活无法在物理设备上运行。 完整版可供 Xamarin 测试云客户使用,有关更多信息,请联系 sales@xamarin.com 如果您已经是 Xamarin Test Cloud 客户,您可以通过以下方式之一提供您的 api: * 使用 ApiKey 方法添加它 ConfigureApp * 设置 XTC_API_KEY 环境变量 * 将以下属性添加到您的 Properties/AssemblyInfo.cs 文件:[程序集:Xamarin.UITest.TestCloudApiKey(YOUR_API_KEY)] * 将包含您的 api 密钥的 xtc_api-key 文件放在测试程序集的上游目录中
Xamarin Android 播放器:
设置:System.Exception:未连接设备
GenyMotion:
SetUp:System.Exception:执行失败:/users/erikandersen/Library/Developer/Xamarin/android-sdk-macosx/platform-tools/adb devices - 退出代码:1 无法绑定 'tcp:5037' ADB 服务器没有 ACK * 无法启动守护进程 * 错误: adb 服务器已过期。杀戮……
将 GenyMotion 更新到 2.3.1 后,我现在收到以下错误:
SetUp: System.Exception: App Installation failed with output: 12050 KB/s (11199602 bytes in 0.907s) 包:/data/local/tmp/final-xxxxxx.apk 失败[INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]
NUnit 代码
AndroidApp _app;
public string PathToAPK get; set;
[TestFixtureSetUp]
public void BeforeAll ()
var path = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;
var info = new FileInfo(path);
var directory = info.Directory.Parent.Parent.Parent.FullName;
PathToAPK = Path.Combine(directory, "Android", "bin", "Debug", "Demo.Android.apk");
[SetUp]
public void BeforeEach ()
_app = ConfigureApp.Android.ApkFile (PathToAPK).StartApp ();
[Test]
public void TestInvalidEmail ()
_app.EnterText (c => c.Class ("UITextField"), "");
TestInvalidEmail() 永远不会被调用,因为 NUnit 失败了
_app = ConfigureApp.Android.ApkFile (PathToAPK).StartApp ();
背景:
我正在将 Xamarin.UITests 用于我正在开发的 ios/Android 应用程序,但我们遇到了 Android 方面的问题。 iOS 工作正常。我为每个测试编写了两次,一次在 C# 中,一次在 Ruby 中使用葫芦,以隔离问题。 Calabash 工作正常,但任何 C# NUnit 测试项目都无法连接到我尝试启动的任何模拟器。
我尝试过的:
-
在我运行测试之前确保模拟器已经在运行
确保只有 1 个模拟器在运行
重启 adb 服务器
尝试多种类型的模拟器(即 Xamarin Android Player、Gennymotion 和 Google 模拟器)
【问题讨论】:
【参考方案1】:所以,经过几个小时的工作,这修复了它:
-
将 GennyMotion 升级到 2.3.1
删除我的旧 GenyMotion 模拟器 (Nexus 4) 并创建一个新的
在我的 Android Build 设置中添加对所有 ABI 的支持
Android Project > Options > Android Build > Advanced Tab > Supported ABIs > Check "armeabi, armeabi-v7a, x86" > OK
-
通过终端生成一个新的 .apk 文件(在 Android 项目目录中)
/usr/bin/xbuild /t:Package /p:Configuration=Release .csproj
-
通过 calabash-android 退出 .apk
calabash-android resign ./bin/Release/.apk
-
在 Xamarin Studio 中,将我的启动项目设置为我的 UITest 项目
启动 GenyMotion 模拟器
在 Debug 配置下运行测试,仅激活 GenyMotion 模拟器
它奏效了!我仍然无法使用 Google Emulator 或 Xamarin Android Player 运行 UI 测试。有趣的是,我也无法使用 GenyMotion 调试我的 Android 项目。它只对 UITests 有好处。所以这是我目前的设置:
Xamarin Android Player - 正常调试
GenyMotion - UITests
【讨论】:
【参考方案2】:我遇到了同样的问题,在设置 ConfigureApp 时设置了 ApiKey 解决了。
[SetUp]
public void SetUp()
_app = ConfigureApp.iOS.AppBundle(PathToIPA).ApiKey("YOUR_API_KEY_HERE").StartApp();
如here。只需将您的 ApiKey 放在那里即可。
注意:Xamarin Android Player 没有这个问题。运行 Android 5.0 模拟器的 AVD 没有这个问题。我只在运行 Android 4.0.3 模拟器的 AVD 上遇到了这个问题。
【讨论】:
以上是关于Xamarin.UITests Android 设备未检测到或不工作的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.UITests - 在真实设备上进行测试 - iOS - 应用权限弹出窗口问题
运行 Xamarin.UITests 时有没有办法让应用程序选择语言或文化