一个html中有<select name="cptyContact"><option value="0"> </option>
<option value="1721">HeapCPTY10</option></select>,我用httpUnit的WebResponse得到这个html,想把第二个option选中,也就是加个selected=“selected”,变成<select name="cptyContact"><option value="0"> </option>
<option value="1721" selected="selected">HeapCPTY10</option></select>。
因为这个option没name,HTMLElement[] htmlElements=res.getElementsWithName("XX")行不通,想用htmlElements=res.getElementsWithAttribute(name, value)它吧,不能适合多个这种界面,因为value的值会不一样,bytagnanme更行不通了,一个界面有559个option,我也不知道我要找的是第几个option。
我只好先用getElementsWithName得到select element,然后用item(2)(不知道为什么有三个node,两个option中间夹了个#text,有谁知道为什么?),得到了要的option。是个org.w3c.dom.Node,看了所有的方法就是没有一个是加属性的。就是说不知道怎么给已有的org.w3c.dom.Node加属性。另外当我用node的getnodevalue和getTextContent()取得值HeapCPTY10,结果都是null。我试着遍历子节点,竟然发现HeapCPTY10是这个node的子节点。不知道为什么。
<option value="1721">HeapCPTY10</option></select>,我用httpUnit的WebResponse得到这个html,想把第二个option选中,也就是加个selected=“selected”,变成<select name="cptyContact"><option value="0"> </option>
<option value="1721" selected="selected">HeapCPTY10</option></select>。
因为这个option没name,HTMLElement[] htmlElements=res.getElementsWithName("XX")行不通,想用htmlElements=res.getElementsWithAttribute(name, value)它吧,不能适合多个这种界面,因为value的值会不一样,bytagnanme更行不通了,一个界面有559个option,我也不知道我要找的是第几个option。
我只好先用getElementsWithName得到select element,然后用item(2)(不知道为什么有三个node,两个option中间夹了个#text,有谁知道为什么?),得到了要的option。是个org.w3c.dom.Node,看了所有的方法就是没有一个是加属性的。就是说不知道怎么给已有的org.w3c.dom.Node加属性。另外当我用node的getnodevalue和getTextContent()取得值HeapCPTY10,结果都是null。我试着遍历子节点,竟然发现HeapCPTY10是这个node的子节点。不知道为什么。
1. 通过HTMLElement[] htmlElements=res.getElementsWithName("cptyContact");得到你要修改的Select元素。
2. HTMLElement select = HTMLElement[0] ;//这应该就是你的Select元素了。
3.遍历它下面的字节点。如果是第二个就选中。
List list = select.getChildren();
for(int i=0;i<list.size();i++) {
HTMLElement option = (HTMLElement)list.get(i);
if(i == 1){
option.setAttribute("selected","selected");
break;
}
}
以上就是我的思路,代码是伪代码,不一定对的。你查相应的方法吧。
HTMLElement有个getNode()方法是返回它下面的字节点的 。然后通过item(index)获得具体的位置。
所以你在得到select元素后应该先调用getNode()方法,然后再调用item方法
类似。 selectEelment.getNode().item(1);
Node s=node3.getAttributes().getNamedItem("value");
Assert.assertNotNull("selected is null",s);
Attr selected=dom.createAttribute("selected");
selected.setValue("selected");
node3.getAttributes().setNamedItem(selected);但是看结果我没加上去。
要将 Node 添加到树中,可以用 Add 方法(Nodes 集合)。该方法包括两个参数,relative 和 relationship,它们确定节点被加到何处。第一个参数 relative 指定节点名称,第二个参数 relationship 指定新加入的节点与名为 relative 的节点之间的关系。