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

时间:2014-07-11 15:30:28

标签: eclipse drag-and-drop eclipse-rcp gui-testing swtbot

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

我正在尝试构建一个SWTBot测试,将一个节点从Tree Viewer拖动到一个图表编辑器中(使用Graphiti,不要认为这很重要)。要拖动的节点位于其自己的视图中,而不是工具栏中,因此执行此操作的标准方法无法工作:

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

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

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

2 个答案:

答案 0 :(得分:0)

有许多拖拽方案尚未在SWTBot中实施。我不知道你的案件是否属于他们。我知道我必须创建自己的实用程序来拖动表行,否则使用空的替换方法。 因此,我认为你应该深入研究SWTBot代码,看看你是否找到了这样一个空方法。

答案 1 :(得分:0)

应该暂时更新一下,但不想让线程挂起,所以我会添加我的发现:

我最终不得不使用反射从我的查看器中获取画布对象,然后能够将其传递给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);