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:Calabash 未链接

Xamarin.UITests - 在真实设备上进行测试 - iOS - 应用权限弹出窗口问题

运行 Xamarin.UITests 时有没有办法让应用程序选择语言或文化

如何在 Xamarin UITests 获取列表视图项的计数

启用后将我的 Android 应用程序设为完全信息亭模式

Android课设报告 123 赵乾