SuperAPI AI 工具集

dotnet-maui-testing

测试与质量

查看项目

更新于 10-16 02:49

技能介绍

用途

dotnet-maui-testing 用于测试 .NET MAUI 应用程序,主要结合两种工具:Appium 用于 UI 自动化测试,XHarness 用于跨平台测试执行。它覆盖设备与模拟器测试、平台特定行为验证、MAUI 控件的元素定位策略,以及移动端/桌面端应用的测试基础设施。

版本假设:.NET 8.0+ 基线,Appium 2.x 配合 UIAutomator2(Android)和 XCUITest(iOS)驱动,XHarness 1.x。示例使用最新的 Appium .NET 客户端(5.x+)。

不在范围内:共享 UI 测试模式(页面对象模型、等待策略)属于 [skill:dotnet-ui-testing-core];基于浏览器的测试由 [skill:dotnet-playwright] 覆盖;测试项目脚手架由 [skill:dotnet-add-testing] 负责。

主要能力

  • 使用 Appium 对 MAUI 应用进行 UI 自动化测试,支持 Android、iOS、Windows 平台。
  • 通过 AutomationId 进行跨平台元素定位,映射到各平台原生无障碍标识符。
  • 平台特定行为测试,如 Android 返回按钮、iOS 滑动手势。
  • 屏幕尺寸与方向测试(如横屏显示侧边面板)。
  • 使用 XHarness 在设备和模拟器上运行测试,处理应用安装、测试执行和结果收集。
  • 支持 xUnit v3 原生跳过(Assert.SkipWhen)和 [Trait] 标记平台特定测试。
  • 页面对象模型(Page Object Model)应用于 MAUI 测试,提升可维护性。

使用方式

前置条件

  • 通过 [skill:dotnet-add-testing] 搭建 MAUI 测试项目。
  • 安装 Appium 服务器(npm install -g appium)。
  • Android:配置 Android SDK 与模拟器。
  • iOS:安装 Xcode 与模拟器(仅 macOS)。
  • Windows:安装 WinAppDriver。

Appium 设置

添加 NuGet 包:

<PackageReference Include="Appium.WebDriver" Version="5.*" />
<PackageReference Include="xunit.v3" Version="3.2.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5" />

驱动初始化通过 AppiumFixture 实现 IAsyncLifetime,根据平台设置 AppiumOptions(PlatformName、AutomationName、App 路径、设备名等),连接 http://localhost:4723。注意:仅使用显式等待,不要设置 ImplicitWait(与 WebDriverWait 组合会产生叠加超时行为)。

测试配置通过环境变量或 test runsettings 设置目标平台、APK 路径、iOS 应用路径、Windows 应用路径。

元素定位

MAUI 的 AutomationId 属性映射到平台原生无障碍标识符,是跨平台测试最可靠的定位器。在 XAML 中为控件设置 AutomationId,测试中使用 MobileBy.AccessibilityId 查找元素。

页面对象模型

应用页面对象模型模式,封装元素查找和操作,如 LoginPage 提供 Login 方法返回 HomePage,提升测试可读性。

平台特定行为测试

使用 [Trait] 标记平台,结合 xUnit v3 的 Assert.SkipWhen 在非目标平台跳过测试。示例包括 Android 返回按钮导航、iOS 滑动删除、屏幕方向切换。

XHarness 测试执行

安装:dotnet tool install --global Microsoft.DotNet.XHarness.CLI

运行 Android 模拟器测试:

xharness android test \
    --app bin/Release/net8.0-android/com.myapp-Signed.apk \
    --package-name com.myapp \
    --instrumentation devicerunner.AndroidInstrumentation \
    --output-directory test-results/android

运行 iOS 模拟器测试:

xharness apple test \
    --app bin/Release/net8.0-ios/MyApp.app \
    --target ios-simulator-64 \
    --output-directory test-results/ios

设备运行器:添加 NuGet 包 Microsoft.DotNet.XHarness.TestRunners.Xunit,在 MauiProgram.cs 中调用 builder.UseVisualRunner()。

适用场景

  • 需要对 .NET MAUI 应用进行跨平台 UI 自动化测试的团队。
  • 在真实模拟器/模拟器上验证 MAUI 渲染、导航和平台服务行为。
  • 在 CI 中按平台运行正确的测试,避免不支持功能导致的失败。
  • 测试平台特定交互(返回按钮、滑动手势、屏幕方向)。

限制与注意事项

  • iOS 测试需要 macOS 和 Xcode,不能在非 macOS 机器上运行。
  • 不要硬编码模拟器/模拟器名称,应使用环境变量或测试配置。
  • 不要忘记在 MAUI 控件上设置 AutomationId,否则 Appium 回退到平台特定选择器(XPath、类名),破坏跨平台测试。
  • 不要在没有等待策略的情况下使用 FindElement,导航后元素可能不立即可用。
  • 不要留下未管理的 Appium 服务器,应作为 fixture 或 CI 服务启动,避免端口冲突和测试挂起。
  • 使用显式等待,避免 Thread.Sleep 和隐式等待。

交叉引用

  • [skill:dotnet-ui-testing-core]:页面对象模型、测试选择器、异步等待模式。
  • [skill:dotnet-xunit]:xUnit fixtures 和测试组织。
  • [skill:dotnet-maui-development]:MAUI 项目结构、XAML/MVVM 模式、平台服务。
  • [skill:dotnet-maui-aot]:iOS/Mac Catalyst 上的 Native AOT 和 AOT 构建测试注意事项。