我使用 junit 来断言检票口组件的存在:
wicketTester.assertComponent("dev1WicketId:dev2WicketId:formWicketId", Form.class);
这适用于某些形式。对于复杂的结构,通过搜索所有的html文件很难找到表单的路径。有什么方法可以轻松找出路径吗?
我使用 junit 来断言检票口组件的存在:
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
从一个页面中获取所有的 s。
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());
}
}
});
}