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

本文关键字:情况下 操作 控件 模式 任何 实现 | 更新日期: 2023-09-27 17:51:08

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

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

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

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

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

  1. 在发送点击之前,确保按钮的父级(窗格或窗口设置为前景)
  2. 与其将点击发送到AutomationElement的角落,不如尝试在元素的中点发送,
  3. 同样,尝试先将鼠标悬停在元素上,等待200ms,然后发送click,这样你就可以确定看到执行。[相信我,这对调试有很大帮助,避免了很多问题。)

最好的事情是,如果那些实现系统的家伙将实现服务器端UIA提供程序到他们的UI元素!

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

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当它涉及到几个屏幕与不同的位置或分辨率-所以光标。)定位是最简单的方法,也是非常可靠的)