7

junit を使用して、既存の wicket コンポーネントをアサートします。

wicketTester.assertComponent("dev1WicketId:dev2WicketId:formWicketId", Form.class);

これは、いくつかのフォームで機能します。複雑な構造の場合、すべての html ファイルを検索してフォームのパスを見つけることは困難です。パスを簡単に見つける方法はありますか?

4

3 に答える 3

9

コンポーネントがある場合は、 を呼び出すことができます#getPageRelativePath()。例えば

// Supposing c is a component that has been added to the page.
// Returns the full path to the component relative to the page, e.g., "path:to:label"
String pathToComponent = c.getPageRelativePath();

visitChildren()メソッドを使用して、マークアップ コンテナーの子を取得できます。次の例は、ページからすべての を取得する方法を示してFormいます。

List<Form> list = new ArrayList<Form<?>>();
Page page = wicketTester.getLastRenderedPage();
for (Form form : page.visitChildren(Form.class)) {
    list.add(form);
}
于 2012-11-26T13:00:03.677 に答える
7

それらを取得する簡単な方法は、アプリケーションを初期化するときに呼び出すことgetDebugSettings().setOutputComponentPath(true);です。これにより、Wicketは、生成されたHTMLへのこれらのパスをすべてのコンポーネントバインドタグの属性として出力します。

ただし、これはデバッグモードでのみ有効にすることをお勧めします。

public class WicketApplication extends WebApplication {
    @Override
    public void init() {
        super.init();

        if (getConfigurationType() == RuntimeConfigurationType.DEVELOPMENT) {
            getDebugSettings().setOutputComponentPath(true);
        }
    }
}
于 2012-11-26T19:08:56.403 に答える
1

RJoの答えを拡張します。

このメソッドpage.visitChildren(<Class>)は非推奨 (Wicket 6) のようです。そのため、IVisitor を使用すると、次のようになります。

protected String findPathComponentOnLastRenderedPage(final String idComponent) {
    final Page page = wicketTester.getLastRenderedPage();
    return page.visitChildren(Component.class, new IVisitor<Component, String>() {
        @Override
        public void component(final Component component, final IVisit<String> visit) {
            if (component.getId().equals(idComponent)) {
                visit.stop(component.getPageRelativePath());
            }
        }
    });
}
于 2016-09-24T14:13:47.857 に答える