2

我正在尝试UIAutomation为我们的项目实施自动化测试。但是许多控件不是标准的,并且也没有为这些控件实现适当的模式。在这种情况下,我应该如何通过UIAutomation 框架来操作控件?

例如,我们产品中的按钮是通过 Pane 实现的,而调用的模式也没有实现。我应该如何点击按钮?(为了避免在测试机器上安装 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();
}
4

2 回答 2

1

当控制模式没有实现时,唯一的交互方式是点击周围的东西。我建议尝试遵循以避免最大错误。

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

最好的事情是,如果那些实现该系统的人会为他们的 UI 元素实现服务器端 UIA 提供程序

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

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 是最简单的方法,这也非常可靠的)


于 2014-05-08T14:04:22.360 回答