1

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

4

3 回答 3

2

作为一种解决方法,我使用了这段代码

public void verifyWizardMessage(String message) throws AssertionError{
    try{
       bot.text(" "+message);
    }catch(WidgetNotFoundException e){
        throw (new AssertionError("no matching message found"));
    }
}

这里 bot 是方法可用的 SWTBot 实例。向导消息会自动在描述字段前添加一个空格,所以我使用" "+message. 希望能帮助到你

于 2012-09-07T05:54:38.980 回答
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;
            }
        });
    }
}
于 2014-08-12T09:41:39.970 回答
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.");
于 2019-08-15T18:10:31.693 回答