如何在没有实现任何模式的情况下操作控件?

时间:2013-01-09 08:25:06

标签: c# .net-framework-version microsoft-ui-automation

我正在尝试通过UIAutomation为我们的项目实施自动化测试。但是很多控件都不是标准的,并且对于那些控件也没有实现正确的模式。在这种情况下,如何通过 UIAutomation framework 操作控件?

例如,我们产品中的按钮是通过窗格实现的,调用的模式也没有实现。我该如何点击按钮? (为了避免在测试机器上安装VS,我不想在Mouse.Click()命名空间中使用Microsoft.VisiualStudio.TestTools.UITesting)有没有办法只使用UIAutomation框架或嵌入在.net框架中的其他东西?提前致谢! (如果实现了正确的模式,下面的代码将起作用。作为新用户,我无法发布截图供您参考,抱歉!)

object temp = null;
if (btnTest.TryGetCurrentPattern(InvokePattern.Pattern, out temp))
{
    InvokePattern btnTestPattern = temp as InvokePattern;
    btnTestPattern.Invoke();
}

2 个答案:

答案 0 :(得分:1)

最好的事情是,如果那些实施该系统的人会implement server-side UIA provider to their UI Elements

但通常这是不可能的......,我使用了以下解决方法(至少用于点击/切换):

AutomationElement yourAE = ...// some code to find the right AutomationElement (AE)
clickablePoint = yourAE.GetClickablePoint();

还可以使用BoundingRectangleProperty

如果您收到该可点击点,则可以使用

System.Windows.Forms.Cursor.Position = new System.Drawing.Point((int)clickablePoint.X, (int)clickablePoint.Y);

移动到该位置,然后通过InputSimulator或某些win32(user32.dll)命令单击它。 (注意:当然你也可以使用InputSimulator或win32来移动鼠标 - 但是当涉及到具有不同位置或分辨率的多个屏幕时,我对InputSimulator有一些问题 - 所以Cursor.Position是最简单的方法,也非常可靠)


答案 1 :(得分:1)

在未实现控件模式时进行交互的唯一方法是单击周围的东西。 我建议尝试按照以避免最大错误。

  1. 在发送点击之前,请确保按钮的父级(窗格或窗口设置为前景)
  2. 不是将点击发送到AutomationElement的角落,而是尝试在元素的中点发送,
  3. 此外,首先尝试将鼠标悬停在元素上,等待200毫秒,然后发送点击,这样你就确定会看到执行。[相信我,这有助于调试很多并避免许多问题。]