如何为Xamarin应用的UWP项目实现UI自动化测试?
适用于Xamarin.Forms UWP项目的UI测试方案
1. WinAppDriver + Appium(官方推荐方案)
这是微软官方支持的UWP UI测试方案,兼容性好,能和你已用的Xamarin.UITest测试逻辑风格对齐:
- 先安装WinAppDriver,完成后确保其后台服务正常运行(默认端口4723)
- 在UWP项目的
Package.appxmanifest里启用测试签名,同时给需要测试的元素设置AutomationId(Xamarin.Forms里通过AutomationProperties.AutomationId附加属性统一设置,和Android/iOS测试保持一致) - 用Appium的C#绑定编写测试,示例初始化代码:
var appOptions = new AppiumOptions(); appOptions.AddAdditionalCapability("app", "你的UWP应用包名(可从Package.appxmanifest中获取)"); appOptions.AddAdditionalCapability("deviceName", "WindowsPC"); var driver = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appOptions);
- 元素操作逻辑和Xamarin.UITest类似,比如通过
AutomationId定位后执行点击、输入等操作,可复用部分跨平台测试的定位逻辑
2. Visual Studio原生UWP测试框架
利用VS自带的测试工具链,无需额外第三方框架:
- 在解决方案中创建UWP测试项目,引用目标Xamarin.Forms的UWP应用
- 使用
Windows.UI.Xaml.Automation命名空间下的API进行元素定位与操作,配合MSUnit或xUnit编写测试用例,示例代码:
// 启动UWP应用 var appUri = new Uri("ms-appx://你的UWP应用包名/"); await ApplicationLauncher.LaunchUriAsync(appUri); // 定位元素 var targetElement = AutomationElement.RootElement.FindFirst( TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "你的元素ID") ); // 执行点击操作 var invokePattern = targetElement.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern; invokePattern?.Invoke();
3. 跨平台测试套件统一方案
为了和已有的Android/iOS Xamarin.UITest套件整合,可将UWP测试逻辑单独抽离,用WinAppDriver实现,保持测试用例结构一致:
- 抽象出统一的元素操作接口,Android/iOS用Xamarin.UITest实现,UWP用WinAppDriver实现
- 测试用例的业务逻辑可复用,仅驱动初始化和底层操作不同,降低维护成本
注意事项
- 运行WinAppDriver时需要以管理员身份启动,否则可能无法正常启动UWP应用
- 确保所有需要测试的UI元素都设置了唯一的
AutomationId,这是跨平台测试元素定位的核心 - 可借助Appium Inspector工具辅助录制和定位UWP元素,简化测试编写流程
内容的提问来源于stack exchange,提问作者Kikanye
相关产品推荐
相关产品推荐

