我正在探索使用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视图之外的任何视图。我在这里做错了吗?提前谢谢。
答案 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()
返回的值。