如何使用SWTBot获取向导描述?

时间:2012-08-01 10:05:54

标签: java eclipse junit eclipse-plugin swtbot

如何使用SWTBot获取eclipse向导的描述文本? wizard.shell.gettext()方法给出了标题,但我找不到任何获取描述的方法。我需要它来验证向导页面上显示的描述和错误消息。

3 个答案:

答案 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.");