SWTWorkbenchBot无法找到" Console"视图

时间:2017-05-14 17:52:41

标签: eclipse view swt swtbot

我正在探索使用SWTWorkbenchBot来实现基于eclipse的项目的自动化。然而,当试图获得" Console"时,某些东西看起来很奇怪。图。

SWTWorkbenchBot workbenchBot = new SWTWorkbenchBot();
String consoleTitle = "Console";
try {
  workbenchBot.viewByTitle(consoleTitle).show();
  System.out.println("Got the Console view");
} catch (Exception e) {
  for (SWTBotView view : workbenchBot.views()) {
    System.out.println(view.getTitle() + "\t" + v.getTitle().equals(consoleTitle));
  }
}

从上面的代码中,我假设以下两种情况之一:

  • 代码将退出"获得控制台视图"消息已打印
  • 或者消息"获得控制台视图"消息未打印,因为"控制台"找不到视图,抛出类型WidgetNotFoundException的异常,并执行catch内的代码。输出不应包含标题" Console"或至少在所有视图标题旁边,应打印false

令人惊讶的是,这种情况并没有发生。消息"获得控制台视图"未打印,但是如果查看视图列表,您会看到存在一行控制台真实,这意味着SWTWorkbenchBot无法使用方法.viewByTitle()获取控制台视图但是他通过检查.views()内容知道存在。

上述代码适用于除Console视图之外的任何视图。我在这里做错了吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果我查看正在运行的Eclipse,View将被称为“Console(General)”。如果你有可能引用带有Id的视图,你真的不应该依赖任何名字,检查下面的代码片段是否有效

workbenchBot.viewById("org.eclipse.ui.console.ConsoleView").show();

只是一个旁注:你应该让ui测试代码更加健壮,UI测试往往会因时序,ui-states,窗口重叠而失败,所以早期失败,明确说明测试失败的原因。

[...]
SWTBotView view = workbenchBot.viewByTitle(consoleTitle);
assertNotNull("Console was not found", view);
try {
  view.show()
} catch (Exception e) {
  fail("Error occured while opening console")
}
[...]

答案 1 :(得分:0)

new SWTWorkbenchBot().viewByPartName("Console").show(); 

应该做这项工作。

在用户界面中看到的是org.eclipse.ui.IWorkbenchPartReference.getPartName()返回的值,而不是org.eclipse.ui.IWorkbenchPartReference.getTitle()返回的值。