自动生成的SWT-小工具的ID(Automatically generate IDs on SWT-

2019-07-04 13:55发布

有没有办法自动生成的SWT的小部件ID,以便与UI测试可以参考呢? 我知道我可以使用seData手动设置ID,但我想要实现此功能在一个有些通用的方式对现有应用程序。

Answer 1:

您可以递归分配ID在你的应用程序中所有的炮弹使用Display.getCurrent().getShells();Widget.setData();

设置标识

Shell []shells = Display.getCurrent().getShells();

for(Shell obj : shells) {
    setIds(obj);
}

您可以访问与方法应用程序中的所有活动(未配置)壳Display.getCurrent().getShells(); 。 可以通过每个的所有子环Shell和ID分配给每个Control与该方法Widget.setData();

private Integer count = 0;

private void setIds(Composite c) {
    Control[] children = c.getChildren();
    for(int j = 0 ; j < children.length; j++) {
        if(children[j] instanceof Composite) {
            setIds((Composite) children[j]);
        } else {
            children[j].setData(count);
            System.out.println(children[j].toString());
            System.out.println(" '-> ID: " + children[j].getData());
            ++count;
        }
    }
}

如果Control是一个Composite可能有复合材料内的控制,这是我用在我的例子递归解决方案的原因。


通过ID查找控件

现在,如果你想找到你弹我建议类似,递归方法的一个控制:

public Control findControlById(Integer id) {
    Shell[] shells = Display.getCurrent().getShells();

    for(Shell e : shells) {
        Control foundControl = findControl(e, id);
        if(foundControl != null) {
            return foundControl;
        }
    }
    return null;
}

private Control findControl(Composite c, Integer id) {
    Control[] children = c.getChildren();
    for(Control e : children) {
        if(e instanceof Composite) {
            Control found = findControl((Composite) e, id);
            if(found != null) {
                return found;
            }
        } else {
            int value = id.intValue();
            int objValue = ((Integer)e.getData()).intValue();

            if(value == objValue)
                return e;
        }
    }
    return null;
}

利用该方法findControlById()你可以很容易地找到Control通过它的ID。

    Control foundControl = findControlById(12);
    System.out.println(foundControl.toString());

链接

  • SWT API:小工具
  • SWT API:显示器


文章来源: Automatically generate IDs on SWT-Widgets