Java应用自动化

我们的Java自动化依赖于Java Access Bridge。 在进行Java自动化之前,请先在启用Java Access Bridge。

启用Java Access Bridge

默认情况下,Java Access Bridge未被启用。 通过命令行或Windows控制面板启用它。 通过运行使用Accessibility API的Java应用程序对其进行测试。

通过命令行启用

通过jabswitch命令启用Java Access Bridge.

运行以下命令(其中%JRE_HOME%是您的JRE目录):

  1. %JRE_HOME%\bin\jabswitch -enable

通过控制面板启用

通过轻松访问中心的控制面板启用Java Access Bridge。

  • 单击“开始”,选择“控制面板”,然后选择“轻松访问”,然后选择“轻松访问中心”。 或者,按Windows徽标键 + U访问“轻松访问中心”。
  • 选择“使用不带显示屏的计算机”。
  • 在“安装的其他程序”部分中,选中“启用Java Access Bridge”复选框(您可能需要向下滚动)。

侦测Java控件

在模型管理器上,从工具栏中选择“侦测Java控件”:

Java应用自动化 - 图1

然后,您可以从Java应用程序中选择一个控件。 从Java应用程序中单击控件后,将显示侦测对话框,然后可以单击“添加”按钮将其添加到模型中。

Java应用自动化 - 图2

您可能会注意到Java对象的图标颜色是橙色,与Windows控件(绿色)不同。

调用Java自动化APIs.

为Java控件生成自动化代码的方式类似于Windows控件。

Java容器API

容器API是用于获取对象的API,如下所示:

  1. interface IJContainer {
  2. parent: IJContainer;
  3. getJFrame(...conditions: ConditionFilter[]): IJFrame;
  4. getJButton(...conditions: ConditionFilter[]): IJButton;
  5. getJCheckBox(...conditions: ConditionFilter[]): IJCheckBox;
  6. getRadioButton(...conditions: ConditionFilter[]): IJRadioButton;
  7. getJEdit(...conditions: ConditionFilter[]): IJEdit;
  8. getJCustom(...conditions: ConditionFilter[]): IJControl;
  9. }

Java对象成员

所有的java对象继承于IJControl接口:

  1. interface IJControl extends IJContainer {
  2. click(x?: number, y?: number, mousekey?: number): Promise<void>;
  3. dblClick(x?: number, y?: number, mousekey?: number): Promise<void>;
  4. }

而每个特定的对象可能都有自己的控制方法和属性,例如:

  1. interface IJCheckBox extends IJControl {
  2. checkState(): Promise<boolean>
  3. toggleCheck(checkState: boolean): Promise<void>
  4. }
  1. interface IJEdit extends IJControl {
  2. set(value: string): Promise<void>;
  3. value(): Promise<string>;
  4. }

以下是调用Java对象的示例:

  • 样例 1:
  1. const { TestModel } = require('leanpro.win');
  2. const model = TestModel.loadModel(__dirname + '/java_model.tmodel');
  3. (async function () {
  4. try {
  5. await model.java.getJEdit("text1").set('some content');
  6. } catch(err) {
  7. console.log('err', err)
  8. }
  9. })();

为了从模型中获取Java控件,您应该从“model.java”开始调用,该模型将返回根IJContainer”`对象,后者又可以从模型中获取其他Java对象。

当您在Java对象上调用成员,Java对象无法找到匹配的控件时,它将引发“找不到对象”异常。

如果“ text1”对象可以找到编辑框控件,则它将其内容设置为“some content”。

  • 样例 2:

    以下是一个示例片段,它获取复选框的是否选中状态,并切换其状态为选中选中。

  1. (async function () {
  2. let checkbox = model.java.getJCheckBox('checkbox-0');
  3. console.log('checked state', await checkbox.checkState());
  4. await checkbox.toggleCheck(true);
  5. })();