Wicket-能否为中继器内的元素指定标记ID?

Wicket-能否为中继器内的元素指定标记ID?,wicket,Wicket,由于随机标记ID,我很难使用Selenium测试Wicket应用程序 对于单个元素,我可以使用abc.setOutputMarkupId(true.setMarkupId(“myId”) 显式设置其标记id。 但是如果使用中继器(如ListView)动态添加元素会怎么样?有没有办法指定标记id序列应该是什么样子的?那么,您不能对ListView执行同样的操作吗?如果您创建自己的ListView实现,然后在populateItem(final ListItem ListItem)方法中,在相应的L

由于随机标记ID,我很难使用Selenium测试Wicket应用程序

对于单个元素,我可以使用abc.setOutputMarkupId(true.setMarkupId(“myId”) 显式设置其标记id。

但是如果使用中继器(如ListView)动态添加元素会怎么样?有没有办法指定标记id序列应该是什么样子的?

那么,您不能对ListView执行同样的操作吗?如果您创建自己的
ListView
实现,然后在
populateItem(final ListItem ListItem)
方法中,在相应的
ListItem
上执行以下操作:

listItem.setOutputMarkupId(true); // write id attribute of element to html
listItem.setMarkupId("id"+i);

其中,
i
是您在ListView的构造函数中初始化的某个索引还是什么?

正如Andrei所说,这是可能的,但很危险。 setMarkupId文档:

检索标记中表示此组件的id。这是通过调用显式设置的id属性 org.apache.wicket.Component.setMarkupId(java.lang.String),id 标记中定义的属性,或中自动生成的id 那个命令。如果未设置显式id,此函数将生成一个id 将在页面中唯一的值。这是最好的方法 不存在id冲突的可能性。


而且你不能用getMarkupId()获取标记id

ListItem有方法#getIndex(),这是一个很好的观点,但是我认为创建某种全局(甚至每个元素类型的idividual)序列器(例如使用AtomicInteger)可以考虑id的唯一性。Wicket生成的id存在的问题是,每次重新加载应用程序/页面时,它都会发生更改,这使得它成为自动化功能测试的噩梦。