В Java HtmlUnit как добавить скрытый ввод в форму? - PullRequest
1 голос
/ 11 февраля 2011

Я не могу создать экземпляр HtmlHiddenInput и использовать метод appendChild для объекта формы, поскольку у первого нет конструктора. Есть ли лучший способ, чем делать это в JavaScript? Я бы хотел отключить JavaScript для экономии ресурсов.

Ответы [ 3 ]

3 голосов
/ 30 мая 2011

Это официальный способ сделать это:

// 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);
0 голосов
/ 16 февраля 2016

У меня была такая же проблема с 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;
0 голосов
/ 14 февраля 2011

В идеале я хотел бы иметь возможность написать (где f - HtmlForm, p - HtmlPage, ba 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 должно быть запрещено.

...