Automated tests MSAA找不到winforms控件

Automated tests MSAA找不到winforms控件,automated-tests,ui-automation,coded-ui-tests,inspect,ui-testing,Automated Tests,Ui Automation,Coded Ui Tests,Inspect,Ui Testing,我正在使用编码UI来自动化应用程序。在自动化过程中,应用程序内部会发生一个复杂的过程(在应用程序内部加载PowerPoint)。在此过程之后,我无法继续测试,因为MSAA无法在应用程序中找到任何控件。在自动化失败前后,我正在使用Inspect.exe。我已附上故障前后检查工具的屏幕截图。有没有办法克服这个问题?每当我遇到这个问题时,如果不重新启动应用程序,我就无法继续进行自动化测试。 任何帮助都将不胜感激! 编码用户界面支持WinForms和WinControl。我建议您使用以下代码查找Win

我正在使用编码UI来自动化应用程序。在自动化过程中,应用程序内部会发生一个复杂的过程(在应用程序内部加载PowerPoint)。在此过程之后,我无法继续测试,因为MSAA无法在应用程序中找到任何控件。在自动化失败前后,我正在使用Inspect.exe。我已附上故障前后检查工具的屏幕截图。有没有办法克服这个问题?每当我遇到这个问题时,如果不重新启动应用程序,我就无法继续进行自动化测试。 任何帮助都将不胜感激!


编码用户界面支持WinForms和WinControl。我建议您使用以下代码查找WinWindow:

`WinWindow samplewindow = new WinWindow();
 samplewindow.SearchProperties[WinWindow.PropertyNames.Name] = "XXYYZZZ";
 samplewindow.SearchProperties[WinWindow.PropertyNames.ClassName] = "XXYYYZZZ";
 WinButton uIButton = new WinButton(samplewindow);
 uIButton.SearchProperties[WinButton.PropertyNames.Name] = "XXYYYZZZ";
 Mouse.Click(uIButton, MouseButtons.Left, System.Windows.Input.ModifierKeys.None, uIButton.GetClickablePoint());'

编码用户界面支持WinForms和WinControl。我建议您使用以下代码查找WinWindow:

`WinWindow samplewindow = new WinWindow();
 samplewindow.SearchProperties[WinWindow.PropertyNames.Name] = "XXYYZZZ";
 samplewindow.SearchProperties[WinWindow.PropertyNames.ClassName] = "XXYYYZZZ";
 WinButton uIButton = new WinButton(samplewindow);
 uIButton.SearchProperties[WinButton.PropertyNames.Name] = "XXYYYZZZ";
 Mouse.Click(uIButton, MouseButtons.Left, System.Windows.Input.ModifierKeys.None, uIButton.GetClickablePoint());'

您说“应用程序内部发生了一个复杂的过程(在应用程序内部加载PowerPoint)”,这表明您的应用程序使用自定义控件。编码的UI无法处理自定义控件,除非它们是为支持MSAA或UIA接口而编写的。在没有这种支持的情况下,最好的编码UI可以通过控件内的坐标来实现。向自定义控件添加支持很复杂。感谢您的回复,您已经完成了这个复杂的过程,如果我尝试记录任何操作,所有控件都会自动声明为自定义控件。您认为在这种情况下,是否有可能继续使用编码UI实现自动化?。我无法理解“通过控件内的坐标”的含义。编码的UI生成代码,如
鼠标。单击(SomeUiControl,新点(10,10))其中
10,10
是控件内的坐标。对于简单控件,代码可以替换为
鼠标。单击(SomeUiControl)
,但生成的代码包含坐标,以更好地支持一些更复杂的控件。编码的UI测试应该能够继续,但这实际上取决于自定义控件如何处理鼠标移动和单击。感谢您的回复,我尝试使用鼠标。单击(SomeUiControl)和uiWindow.DrawHighlight()不走运,异常为UITestControlNotFoundException,消息为“无法找到控件的顶级元素”,我能做什么?。但是,当控件被标识为自定义控件时,带有UIA的Inpect.exe可以找到这些控件。有没有办法更改UIA中的控件而不是UIA中的MSAA或手工编码UI控件?您说“应用程序内部发生了复杂的过程(在应用程序内部加载PowerPoint)”建议应用程序使用自定义控件。编码的UI无法处理自定义控件,除非它们是为支持MSAA或UIA接口而编写的。在没有这种支持的情况下,最好的编码UI可以通过控件内的坐标来实现。向自定义控件添加支持很复杂。感谢您的回复,您已经完成了这个复杂的过程,如果我尝试记录任何操作,所有控件都会自动声明为自定义控件。您认为在这种情况下,是否有可能继续使用编码UI实现自动化?。我无法理解“通过控件内的坐标”的含义。编码的UI生成代码,如
鼠标。单击(SomeUiControl,新点(10,10))其中
10,10
是控件内的坐标。对于简单控件,代码可以替换为
鼠标。单击(SomeUiControl)
,但生成的代码包含坐标,以更好地支持一些更复杂的控件。编码的UI测试应该能够继续,但这实际上取决于自定义控件如何处理鼠标移动和单击。感谢您的回复,我尝试使用鼠标。单击(SomeUiControl)和uiWindow.DrawHighlight()不走运,异常为UITestControlNotFoundException,消息为“无法找到控件的顶级元素”,我能做什么?。但是,当控件被标识为自定义控件时,带有UIA的Inpect.exe可以找到这些控件。有没有办法更改UIA中的控件而不是UIA中的MSAA或手工编码UI控件?