在Java HtmlUnit中如何向表单添加隐藏输入?

时间:2011-02-11 19:06:49

标签: htmlunit

我无法实例化HtmlHiddenInput并将appendChild方法用于表单对象,因为前者没有构造函数。有没有更好的方法,而不是在JavaScript中这样做?我想禁用javascript以节省资源。

3 个答案:

答案 0 :(得分:3)

这是正式的做法:

// where htmlPage is the current page you're on
// and internalForm is the form you want to append the field to
HtmlElement createdElement = htmlPage.createElement("input");
createdElement.setAttribute("type", inputName);
createdElement.setAttribute("name", name);
createdElement.setAttribute("value", value);
internalForm.appendChild(createdElement);

答案 1 :(得分:0)

理想情况下,我希望能够编写(其中f是HtmlForm,p是HtmlPage,b是WebClient):

HashMap a = new HashMap();
a.put("name", "concealed");
a.put("value", "secret");
f.appendChild(new HtmlHiddenInput(p,a));

但是由于HtmlHiddenInput无法实例化,我不得不回避JavaScript,这更慢,更丑陋:

bool j = b.isJavaScriptEnabled();
if (!j) { b.setJavaScriptEnabled(true); }

p.executeJavaScript(
    "{" +
    "    var" +
    "        d = document," +
    "        i = d.createElement('input');" +
    "    with (i) {" +
    "        name = 'concealed';" +
    "        type = 'hidden';" +
    "        value = 'secret';" +
    "    }" +
    "    d.getElementsByName('form1')[0].appendChild(i);" +
    "}");

if (!j) { b.setJavaScriptEnabled(false); }
恕我直言,有时候太严格的限制会妨碍你。我没有看到为什么禁止实例化HtmlHiddenInput的充分理由。

答案 2 :(得分:0)

我遇到了与HtmlFileInput相同的问题,并通过InputElementFactory找到了解决方法:

    HtmlPage page;
    ...
    AttributesImpl attrs = new AttributesImpl();
    attrs.addAttribute("", "type", "type", "", "hidden");
    HtmlElement el = InputElementFactory.instance.createElement(page, "input", attrs);
    HtmlHiddenInput hiddenInput = (HtmlHiddenInput) el;