UITest 和 Xamarin.Forms 入门
UITest 可以与 Xamarin.Forms 一起用于编写 UI 测试,以在数百台设备的云中运行。
概述
使用 App Center Test,开发人员可为 iOS 和 Android 应用编写自动化用户界面测试。 经过一些细微调整,可使用 Xamarin.UITest 来测试 Xamarin.Forms 应用,包括共享相同的测试代码。 本文介绍结合使用 Xamarin.UITest 和 Xamarin.Forms 的特定使用技巧。
本指南假定用户已具备一定的 Xamarin.UITest 知识。 若要掌握 Xamarin.UITest 知识,建议遵循以下指南:
将 UITest 项目添加到 Xamarin.Forms 解决方案后,即可采用用于 Xamarin.Android 或 Xamarin.iOS 应用程序的相同步骤为 Xamarin.Forms 应用程序编写和运行测试。
要求
请参阅 Xamarin.UITest, 确认项目已准备好进行自动 UI 测试。
向 Xamarin.Forms 应用添加 UITest 支持
UITest 通过激活屏幕上的控件并提供输入,在用户通常与应用程序交互的任何位置提供输入,自动执行用户界面。 若要通过按某一按钮或在框中输入文本启用测试,测试代码需要某种可识别屏幕上控件的方法。
若要启用引用控件的 UITest 代码,每个控件均需一个唯一标识符。 在 Xamarin.Forms 中,设置此标识符的建议方法为使用 AutomationId 属性,如下所示:
var b = new Button {
Text = "Click me",
AutomationId = "MyButton"
};
var l = new Label {
Text = "Hello, Xamarin.Forms!",
AutomationId = "MyLabel"
};
AutomationId还可以在 XAML 中设置 属性:
<Button x:Name="b" AutomationId="MyButton" Text="Click me"/>
<Label x:Name="l" AutomationId="MyLabel" Text="Hello, Xamarin.Forms!" />
备注
AutomationId 是 BindableProperty ,因此也可使用绑定表达式进行设置。
应在测试时所需的所有控件中添加唯一 (包括按钮、文本条目和可能需要查询其值的标签 AutomationId) 。
警告
如果尝试多次设置 的 属性,则 InvalidOperationException 会引发 AutomationId Element 。
iOS 应用程序项目
若要在 iOS 上运行测试 ,Xamarin Test Cloud代理 NuGet 包添加到项目中。 添加后,将以下代码复制到 AppDelegate.FinishedLaunching 方法中:
#if ENABLE_TEST_CLOUD
// requires Xamarin Test Cloud Agent
Xamarin.Calabash.Start();
#endif
Calabash 程序集使用非公共 Apple API,这导致应用被应用程序App Store。 但是,如果未从代码中显式引用 Calabash 程序集,则 Xamarin.iOS 链接器会从最终 IPA 中将其删除。
备注
默认情况下,发布版本没有 ENABLE_TEST_CLOUD 编译器变量,这会导致从应用捆绑包中删除 Calabash 程序集。 但是,调试版本默认定义了编译器指令,从而阻止链接器删除程序集。
以下屏幕截图显示有关调试版本的 ENABLE_TEST_CLOUD 编译器变量设置:
Android 应用程序项目
与 iOS 不同,Android 项目不需要任何特殊的启动代码。
编写 UITest
有关编写 UITest 的信息,请参阅 UITest 文档。 以下概要步骤专门描述了如何生成 Xamarin.Forms 演示 UsingUITest。
使用 Xamarin.Forms UI 中的 AutomationId
编写任何 UITest 之前,必须确保 Xamarin.Forms 应用程序用户界面上的脚本可编辑。 确保用户界面中所有控件都有 , AutomationId 以便可以在测试代码中引用它们。
在 UITest 中引用 AutomationId
编写 UITest 时, AutomationId 值在每个平台上以不同方式公开:
- iOS 使用
id字段。 - Android 使用
label字段。
若要编写将在 iOS 和 Android 上找到 的跨平台 AutomationId UITest,请使用 Marked 测试查询:
app.Query(c=>c.Marked("MyButton"))
短格式 app.Query("MyButton") 同样适用。
将 UITest 项目添加到现有解决方案
Visual Studio 提供了一个模板,帮助将 Xamarin.UITest 项目添加到现有 Xamarin.Forms 解决方案:
右键单击解决方案,然后选择"文件 ">"新建项目"。
从 Visual C# 模板中,选择“测试”类别。 选择“UI 测试应用”>“跨平台”模板:

此步骤将包含 NUnit、Xamarin.UITest 和 NUnitTestAdapter NuGet 包的新项目添加到解决方案:

NUnitTestAdapter 是一个第三方测试运行程序,Visual Studio运行来自 Visual Studio。
新项目中还包含两个类。 AppInitializer 类包含有助于初始化和设置测试的代码。 另一个类 Tests 包含有助于启动 UITest 的 boilerplate 代码。
将项目引用从 UITest 项目添加到 Xamarin.Android 项目:

此步骤允许 NUnitTestAdapter 从 Visual Studio 运行 Android 应用的 UITest。
将 UITest 添加到 Xamarin 解决方案后,可以创建 Uitest,在本地运行它们,并将其提交到 App Center 测试。
摘要
使用一种简单机制即可轻松通过 Xamarin.UITest 测试 Xamarin.Forms 应用程序,以将 AutomationId 公开为测试自动化的唯一视图标识符。 将 UITest 项目添加到 Xamarin.Forms 解决方案后,即可采用用于 Xamarin.Android 或 Xamarin.iOS 应用程序的相同步骤为 Xamarin.Forms 应用程序编写和运行测试。
有关如何将测试提交到 App Center 测试的信息,请参阅 提交 uitest For xamarin 或 提交 uitest for xamarin。 有关 UITest 的详细信息,请参阅 App Center Test 文档。






