我正在探索SWTWorkbenchBot的使用在我的一个基于Eclipse项目的自动化使用。然而,一些试图让“控制台”视图时,似乎不可思议。
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));
}
}
从上面的代码中,我假定的以下2种情况之一成立:
WidgetNotFoundException
的异常被抛出并且catch
中的代码将被执行。输出不应该包含标题为“控制台”,或者至少,毗邻所有视图标题,false
应打印。出人意料的是,这不会发生。 “拿到了控制台视图”消息不打印,但如果你看一下视图的列表中,你看到了存在行控制台真,这意味着,使用方法.viewByTitle()
的SWTWorkbenchBot无法得到控制台的看法,但他知道存在通过检查.views()
内容。
上面的代码除了控制台视图中的任何视图正常工作。难道我做错了什么吗?提前致谢。
如果我看着我运行Eclipse的观点被称为“控制台(常规)”。你真的不应该依赖任何人的名字,如果你有一个ID引用视图的可能性,检查follwing代码段将工作
workbenchBot.viewById("org.eclipse.ui.console.ConsoleView").show();
就在旁注:你应该让UI测试码多一点健壮,UI测试往往失败中定时,UI的状态,重叠窗口引起的,所以年初一个明确的说法,为什么测试失败失败。
[...]
SWTBotView view = workbenchBot.viewByTitle(consoleTitle);
assertNotNull("Console was not found", view);
try {
view.show()
} catch (Exception e) {
fail("Error occured while opening console")
}
[...]
new SWTWorkbenchBot().viewByPartName("Console").show();
应该做的工作。
你在用户界面中看到的,而是由org.eclipse.ui.IWorkbenchPartReference.getPartName()
返回的值不org.eclipse.ui.IWorkbenchPartReference.getTitle()
返回的值。