我正在为一个简单的应用程序编写一些Coded UI测试,似乎无法获取代码来查找或与MessageDialog框交互。使用“测试”构建器,我能够看到该框及其相关控件,但在测试中,除了应用程序中的元素之外,我无法找到任何内容。
我认为问题在于,用于搜索的XamlWindow仅限于被测试的应用程序,并且弹出窗口存在于此上下文之外。我试图使用弹出窗口中存在的上下文来实例化一个新的XamlWindow,但代码除了硬件按钮的应用程序之外无法找到任何窗口。
我已经看到在其他一些地方引用了在使用UIMap时可以找到MessageDialog,但是我正在编写这些测试并尽可能避免使用它们。我不反对使用UIMap,如果有可能在代码中生成它并加载MessageDialog,如果可能的话。
答案 0 :(得分:0)
使用自动生成的代码后,我能够找到答案。要访问MessageDialog,您需要实例化引用弹出窗口的UITestControl。出现此问题是因为此窗口超出了正在测试的应用程序的范围。我能够使用以下代码实例化此窗口的UITestControl对象:
UITestControl popupWindow = new UITestControl();
popupWindow.TechnologyName = "UIA";
popupWindow.SearchProperties[UITestControl.PropertyNames.ControlType] = "Window";
popupWindow.SearchProperties["FrameworkId"] = "UIX";
这个和UITestControl对象的正常实例化之间的重要区别是没有任何东西传递给新的。这允许代码附加到测试应用程序范围之外的对象。从这里获取弹出窗口中的任何元素与在普通页面上相同,但不是传递testApp XamlWindow对象,而是传递popupWindow对象。