Wicket-能否为中继器内的元素指定标记ID?
由于随机标记ID,我很难使用Selenium测试Wicket应用程序 对于单个元素,我可以使用abc.setOutputMarkupId(true.setMarkupId(“myId”) 显式设置其标记id。Wicket-能否为中继器内的元素指定标记ID?,wicket,Wicket,由于随机标记ID,我很难使用Selenium测试Wicket应用程序 对于单个元素,我可以使用abc.setOutputMarkupId(true.setMarkupId(“myId”) 显式设置其标记id。 但是如果使用中继器(如ListView)动态添加元素会怎么样?有没有办法指定标记id序列应该是什么样子的?那么,您不能对ListView执行同样的操作吗?如果您创建自己的ListView实现,然后在populateItem(final ListItem ListItem)方法中,在相应的L
但是如果使用中继器(如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()获取标记idListItem有方法#getIndex(),这是一个很好的观点,但是我认为创建某种全局(甚至每个元素类型的idividual)序列器(例如使用AtomicInteger)可以考虑id的唯一性。Wicket生成的id存在的问题是,每次重新加载应用程序/页面时,它都会发生更改,这使得它成为自动化功能测试的噩梦。