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检查器
答案 0 :(得分: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());