我刚开始使用Microsoft Test Manager 2015,并构建了两个测试用例。
第一个是点击托盘图标,然后从中选择一个条目——这很好。
第二种情况有点复杂,我想在WPF窗口中填写一个表格,然后单击一些按钮。
录音进行得很顺利,但重播根本不起作用。它应该从选择一个TabItem开始,选择上一个所选TabItem中的另一个TabItem,然后填写文本字段,按下按钮并确认两个消息对话框。
问题是,TestRunner找不到我的任何控件。即使我选择了正确的TabItem,并尝试执行其中一个"在此处输入someText"步骤,也会花费一些时间,然后在我面前抛出一个异常,粗略地翻译为,由于找不到与搜索属性匹配的控件,无法完成所选步骤的重播(?)。然后是一个列表:
TechnologyName: 'UIA'
FrameworkId: 'WPF'
ControlType: 'TabPage'
AutomationId: 'sometabname'
所有这些都是正确的。如果我尝试执行不同的测试步骤,它会说基本上相同的内容,但不是"ControlType:TabPage",而是"ControlType:Edit"。
我不知道如何从这里开始。我做了一些搜索,但我能找到的只是关于UIAutomation配置/设置的问题,但据我所知,我不能直接在MTM中影响/控制它。
编辑
在简化了测试"用例"(只需单击直接放在窗口/第一个网格中的中止按钮)并编辑mtm.exe.config文件并启用跟踪/日志记录后,我从相应的日志文件中得到了这一点:
mtm.exe, Playback - [WARNING] Internal warning: Target element "[UIA]FrameworkId='WPF' && ControlType='Button' && AutomationId='closeWithoutSave'" was not found, so all intermediate elements were ignored. An incorrect element that matches target element Id can be found as the result. Verify that all intermediate elements in QueryId have valid and unique Ids
mtm.exe, Playback - [WARNING] Internal warning: Search failure: [UIA]FrameworkId='WPF' && ControlType='Button' && AutomationId='closeWithoutSave' | Performed (4) searches, UI element not found
mtm.exe, Playback - {1} [FAILED] Function ElementFetcher::FindScreenElement failed to locate UI element (;[UIA]FrameworkId='WPF' && ControlType='Button' && AutomationId='closeWithoutSave') (Das angegebene Objekt wurde nicht gefunden.)
奇怪的是,我甚至在那个按钮上设置了Automation.AutomationID,但它仍然失败了。此外,我不确定这是否正确,但搜索似乎不包括具有该按钮的窗口的名称/automationID。由于我已经在应用程序中打开了两个窗口,我可以想象这就是问题所在。
我通过将MTM生成的UI测试加载到编码的UI测试项目中来检查它。我打开UI控制图,看到了错误:
TabControl/TabPage导航与TrayIcon的ContextMenu分组在同一个窗口中。
原因是,MTM/编码UI测试使用Title
属性作为窗口(wtf?)的标识符,而不是使用WPF窗口的Name
属性。
解决方案:
将我的WPF配置窗口的Title属性设置为Configuration
并重新执行受影响的测试步骤解决了问题。
提示对于有类似问题的人:增加Visual Studio安装文件夹Common7IDE
中mtm.exe.config
文件中的MaxLevelsForItemContainer
值也可能有所帮助。