在 Windows Phone 上使用 Coded UI 与 MessageDialog 交互

Interact with MessageDialog using Coded UI on Windows Phone

我正在为一个简单的应用程序编写一些编码 UI 测试,但似乎无法获取代码来查找 MessageDialog 框或与之交互。使用测试构建器,我能够看到该框及其关联的控件,但在测试中,我只能在应用程序中找到元素。

我认为问题是用于搜索的 XamlWindow 仅限于被测试的应用程序,弹出窗口存在于此上下文之外。我试图用弹出窗口所在的上下文实例化一个新的 XamlWindow,但代码无法找到任何 window 除了硬件按钮的应用程序。

我在其他几个地方看到使用 UIMap 时可以找到 MessageDialog 的引用,但我正在手工编写这些测试,并尽可能避免使用它们。我不反对使用 UIMap,如果有一种方法可以在代码中生成它并在可能的情况下加载 MessageDialog。

在使用自动生成的代码后,我找到了答案。为了访问 MessageDialog,您需要实例化引用弹出窗口的 UITestControl window。出现问题是因为此 window 超出了正在测试的应用程序的范围。我能够使用以下方法实例化此 window 的 UITestControl 对象:

        UITestControl popupWindow = new UITestControl();
        popupWindow.TechnologyName = "UIA";
        popupWindow.SearchProperties[UITestControl.PropertyNames.ControlType] = "Window";
        popupWindow.SearchProperties["FrameworkId"] = "UIX";

这与 UITestControl 对象的正常实例化之间的重要区别在于,没有任何内容被传递到新的。这允许代码附加到被测应用程序范围之外的对象。从这里获取弹出窗口中的任何元素与在普通页面上相同,但不是传递 testApp XamlWindow 对象,而是传递 popupWindow 对象。