如何使用SWTBot获取eclipse向导的描述文本? wizard.shell.gettext()
方法给出了标题,但我找不到任何获取描述的方法。我需要它来验证向导页面上显示的描述和错误消息。
答案 0 :(得分:1)
作为一种解决方法,我使用了这段代码
public void verifyWizardMessage(String message) throws AssertionError{
try{
bot.text(" "+message);
}catch(WidgetNotFoundException e){
throw (new AssertionError("no matching message found"));
}
}
这里bot是一个可用于方法的SWTBot实例。向导消息会自动为描述字段添加空格,因此我使用" "+message
。希望它有所帮助
答案 1 :(得分:1)
为了测试我们的eclipse插件,我工作的团队在SWTBot上开发了一个自定义DSL来代表向导,对话框等等。这是一个在我们的案例中运行良好的代码片段(请注意,这可能是依赖于eclipse的版本,对于eclipse 3.6和4.2似乎没问题)
class Foo {
/**
* The shell of your dialog/wizard
*/
private SWTBotShell shell;
protected SWTBotShell getShell() {
return shell;
}
protected <T extends Widget> T getTopLevelCompositeChild(final Class<T> clazz, final int index) {
return UIThreadRunnable.syncExec(shell.display, new Result<T>() {
@SuppressWarnings("unchecked")
public T run() {
Shell widget = getShell().widget;
if (!widget.isDisposed()) {
for (Control control : widget.getChildren()) {
if (control instanceof Composite) {
Composite composite = (Composite) control;
int counter = 0;
for (Control child : composite.getChildren()) {
if (clazz.isInstance(child)) {
if (counter == index) {
return (T) child;
}
++counter;
}
}
}
}
}
return null;
}
});
}
/**
* Returns the wizard's description or message displayed in its title dialog
* area.
*
* A wizard's description or message is stored in the very first Text widget
* (cf. <tt>TitleAreaDialog.messageLabel</tt> initialization in
* <tt>org.eclipse.jface.dialogs.TitleAreaDialog.createTitleArea(Composite)</tt>
* ).
*
*/
public String getDescription() {
final Text text = getTopLevelCompositeChild(Text.class, 0);
return UIThreadRunnable.syncExec(getShell().display, new Result<String>() {
public String run() {
if (text != null && !text.isDisposed()) {
return text.getText();
}
return null;
}
});
}
}
答案 2 :(得分:0)
在使用WizardNewProjectCreationPage的情况下,我使用:
bot.textWithLabel("Create Project"); // This title set by page.setTitle("Create Project");
bot.text("Description."); // this is description set by page.setDescription("Description.");