一个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的子节点。不知道为什么。

解决方案 »

  1.   

    org.w3c.dom    这个不是用于XML的吗?
      

  2.   

    不知道为什么有三个node,两个option中间夹了个#text,有谁知道为什么?),因为包含了回车键,有两种方法解决问题,一是去除这个回车键,而是判断这个node的Type,如果我没有记错的话text的Type应该是三
      

  3.   

    靠,我刚写了很多恢复。提交时断网。白写了。郁闷,我再稍微描述下我的思路。
    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;
          }
      }
    以上就是我的思路,代码是伪代码,不一定对的。你查相应的方法吧。
      

  4.   

    select是  com.meterware.httpunit.HTMLElement 是没有getChildren()方法的
      

  5.   

    我刚才查了下API。
    HTMLElement有个getNode()方法是返回它下面的字节点的 。然后通过item(index)获得具体的位置。
    所以你在得到select元素后应该先调用getNode()方法,然后再调用item方法
    类似。 selectEelment.getNode().item(1);
      

  6.   

    这我知道啊,我以前就是这么些的啊。如selectEelment.getNode().item(2);我的代码Node node3=list.item(2);
     Node s=node3.getAttributes().getNamedItem("value");
     Assert.assertNotNull("selected is null",s);
     Attr selected=dom.createAttribute("selected");
     selected.setValue("selected");
     node3.getAttributes().setNamedItem(selected);但是看结果我没加上去。
      

  7.   

    你知道node有什么方法能加属性吗?我没说清楚,就是我不知道怎么给node加属性
      

  8.   

    向 Nodes 集合中添加 Node 对象 
    要将 Node 添加到树中,可以用 Add 方法(Nodes 集合)。该方法包括两个参数,relative 和 relationship,它们确定节点被加到何处。第一个参数 relative 指定节点名称,第二个参数 relationship 指定新加入的节点与名为 relative 的节点之间的关系。