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 プラグインをテストするために、私が一緒に働いていたチームは、ウィザード、ダイアログなどを表すカスタム DSL を SWTBot の上に開発しました。これは、私たちの場合にうまく機能するコードスニペットです (これは 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 に答える