0
  var navigator = BonusAppControllers.EbsControl.CurrentApp.GetWindow("XWindow").Get(SearchCriteria.ByAutomationId("AnimatedExplorerNavigator"));
  AutomationElement dashboardElement = navigator.AutomationElement.FindFirst(TreeScope.Subtree,SearchConditionFactory.CreateForName("NavigateLink_1").AutomationCondition);
  var dashBoardBtn = new Button(dashboardElement, navigator.ActionListener);
  dashBoardBtn.Click();

我有这个名称为 NavigateLink_1 的按钮的代码。现在,当我运行它并调试它时,我发现我能够在 dashBoardBtn 变量中获得正确的按钮实例,但 Click() 函数不起作用。即使我尝试像使用 Get(SearchCriteria.ByText("NavigateLink_1")) 那样使用按钮名称来完成所有这些操作,我也会遇到同样的问题。我用同一组按钮的其他按钮部分尝试了同样的事情,但在这种情况下它工作正常。

谁能建议我可能是什么问题。我正在使用 White Framework 和 UI Spy 作为我的应用程序的 UI 检查器

4

1 回答 1

1

我没有用过 White,但我用过原生的 UIA 库。您偶尔会遇到的问题是您将拥有一个可点击的对象,但根据内部处理点击的方式,您可能不一定能够使用 InvokePattern 来执行点击。这里可能就是这种情况。

作为替代方案,您可以使用一些代码将鼠标光标移动到 AutomationElement 上并使用 P/Invoke 发出单击。这有点小技巧,但当您遇到此问题时,它通常是最简单的选择。

private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;

[DllImport("user32.dll")]
private static extern void mouse_event(UInt32 dwFlags, UInt32 dx, UInt32 dy, UInt32 dwData, IntPtr dwExtraInfo);

...
...

AutomationElement buttonToClick;

...
...

Cursor.Position = buttonToClick.GetClickablePoint();
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new IntPtr());
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new IntPtr());
于 2013-12-30T18:26:38.677 回答