使用Java Access Bridge实现自动化

我可以使用Java Access Bridge事件从Java应用程序中的UI控件(按钮/编辑框/复选框等)中捕获文本。 我怎么能够:

  1. 在编辑框中设置文本
  2. 单击按钮

使用Java Access Bridge API调用?

以下是我为我的项目所做的工作。 创建一个基类API,将所有PInvokes调用到JAB WindowsAccessBridge DLL中。 如果您使用的是64位操作系统,请确保定位正确的DLL名称。 使用getAccessibleContextFromHWND函数从Windows句柄获取VmID和Context。 通过枚举子项找到Java窗口中的文本框或按钮。 一旦找到您正在寻找的控件,TextBox或Button就会执行操作。

1)设置文本

public string Text { get { return GetText(); } set { if (!API.setTextContents(this.VmId, this.Context, value)) throw new AccessibilityException("Error setting text"); } } private string GetText() { System.Text.StringBuilder sbText = new System.Text.StringBuilder(); int caretIndex = 0; while (true) { API.AccessibleTextItemsInfo ti = new API.AccessibleTextItemsInfo(); if (!API.getAccessibleTextItems(this.VmId, this.Context, ref ti, caretIndex)) throw new AccessibilityException("Error getting accessible text item information"); if (!string.IsNullOrEmpty(ti.sentence)) sbText.Append(ti.sentence); else break; caretIndex = sbText.Length; } return sbText.ToString().TrimEnd(); } 

2)单击按钮

 public void Press() { DoAction("click"); } protected void DoAction(params string[] actions) { API.AccessibleActionsToDo todo = new API.AccessibleActionsToDo() { actionInfo = new API.AccessibleActionInfo[API.MAX_ACTIONS_TO_DO], actionsCount = actions.Length, }; for (int i = 0, n = Math.Min(actions.Length, API.MAX_ACTIONS_TO_DO); i < n; i++) todo.actionInfo[i].name = actions[i]; Int32 failure = 0; if (!API.doAccessibleActions(this.VmId, this.Context, ref todo, ref failure)) throw new AccessibilityException("Error performing action"); } 

核心...

 public API.AccessBridgeVersionInfo VersionInfo { get { return GetVersionInfo(this.VmId); } } public API.AccessibleContextInfo Info { get { return GetContextInfo(this.VmId, this.Context); } } public Int64 Context { get; protected set; } public Int32 VmId { get; protected set; } 

我将子类化GUI组件的AccessibleContext并为其提供accessibleAction对象。 使AccessibleContext.getAccessibleAction()返回您的对象。

如果它不为null,它会为屏幕阅读器提供一系列支持的操作,可以通过屏幕阅读器调用doAction来调用它。

Interesting Posts