代码之家  ›  专栏  ›  技术社区  ›  BiggPlanet

SWTBot测试-从树拖放到编辑器

  •  0
  • BiggPlanet  · 技术社区  · 11 年前

    大家早上好(或分别是下午或晚上),

    我正在尝试构建一个SWTBot测试,它将节点从TreeViewer拖到图表编辑器中(使用Graphiti,这并不重要)。要拖动的节点在它自己的视图中,而不是在工具栏中,因此标准的拖动方式不起作用:

    SWTBotGefEditor editor = gefBot.gefEditor(editorName);
    editor.activateTool(functionName);
    editor.drag(20, 20, 20, 20);
    

    我还看到TreeItem有一个dragAndDrop函数,但除非我错了(完全可能),否则我认为这只在拖动到另一棵树时有效。

    有没有方法直接从树拖动到图表编辑器?

    2 回复  |  直到 11 年前
        1
  •  0
  •   S. Cambon    11 年前

    SWTBot中还没有实现许多拖动方案。我不知道你的案子是否是他们的一部分。我知道我必须创建自己的实用程序来拖动表行,否则将使用空的替换方法。 因此,我认为您应该深入SWTBot代码,看看是否找到这样一个空方法。

        2
  •  0
  •   BiggPlanet    11 年前

    不久前应该已经更新了,但不想留下线索,所以我将添加我的发现:

    最后,我不得不使用反射从查看器中获取画布对象,然后将其传递到SWTBot为SWTBotTreeItems提供的dragAndDrop()方法中。虽然你不能给它x/y坐标(就像你从调色板中带来的那样),但它还是很困难,所以它仍然不理想。

    SWTBotView view = gefBot.viewByTitle("My View");
    SWTBotTree tree = view.bot().tree();
    SWTBotTreeItem treeItem = tree.expandNode("Parent Node Name", targetNodeName);
    
    SWTBotGefViewer viewer = editor.getSWTBotGefViewer();
    SWTBotGefFigureCanvas canvas = null;
    
    for (Field f : viewer.getClass().getDeclaredFields()) {
        if ("canvas".equals(f.getName())) {
            f.setAccessible(true);
            try {
                canvas = (SWTBotGefFigureCanvas) f.get(viewer);
            } catch (IllegalArgumentException e) {
                e.printStackTrace(); 
            } catch (IllegalAccessException e) {
                e.printStackTrace(); 
            }
        }
    }
    
    Assert.assertNotNull(canvas);
    treeItem.dragAndDrop(canvas);