junit を使用して、既存の wicket コンポーネントをアサートします。
wicketTester.assertComponent("dev1WicketId:dev2WicketId:formWicketId", Form.class);
これは、いくつかのフォームで機能します。複雑な構造の場合、すべての html ファイルを検索してフォームのパスを見つけることは困難です。パスを簡単に見つける方法はありますか?
junit を使用して、既存の wicket コンポーネントをアサートします。
wicketTester.assertComponent("dev1WicketId:dev2WicketId:formWicketId", Form.class);
これは、いくつかのフォームで機能します。複雑な構造の場合、すべての html ファイルを検索してフォームのパスを見つけることは困難です。パスを簡単に見つける方法はありますか?
コンポーネントがある場合は、 を呼び出すことができます#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);
}
それらを取得する簡単な方法は、アプリケーションを初期化するときに呼び出すことgetDebugSettings().setOutputComponentPath(true);
です。これにより、Wicketは、生成されたHTMLへのこれらのパスをすべてのコンポーネントバインドタグの属性として出力します。
ただし、これはデバッグモードでのみ有効にすることをお勧めします。
public class WicketApplication extends WebApplication {
@Override
public void init() {
super.init();
if (getConfigurationType() == RuntimeConfigurationType.DEVELOPMENT) {
getDebugSettings().setOutputComponentPath(true);
}
}
}
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());
}
}
});
}