Htmlunit通过ID而不是名称

时间:2016-05-25 16:13:36

标签: java htmlunit

我有一个包含多行和类似输入的表单。它们具有不同的ID,但名称相同。

<input id="E2EMPL1" class="uppercase required" type="text" value="" maxlength="9" size="9" name="E2EMPL">

<input id="E2EMPL2" class="uppercase required" type="text" value="" maxlength="9" size="9" name="E2EMPL">

我可以填写第一行,没问题,但是当填写第二行时,我无法弄明白。

这是填写第一行:

            HtmlPage mainPage = webClient.getPage(siteName);
            form = mainPage.getFormByName("timeForm");

            for (TimeEntry te: aList){
               form.getInputByName("chkaction").setValueAttribute("checked");
               form.getInputByName("E2EMPL").setValueAttribute(te.getResource());
               form.getInputByName("ww_fE2WKDT").setValueAttribute(te.getEntryDate());
            }

但我不确定如何在名称保持不变的情况下填写第二行,但ID会更改为EMPL1,EMPL2等。我想我想使用xpath但是我不知道如何?

form.getByXPath("//input[@id='E2EMPL2']"); ???

编辑:作为旁注。我已尝试使用HTTPClient来发布数据。不幸的是,它不适用于这种形式,我不知道为什么。我在这里问了一个问题,从来没有得到任何答案,也没有足够的代表给它一个很好的赏金。但是,我只是尝试了HTMLUnit,如果我填写表单,并点击提交按钮,它将正常工作。这就是我不使用HTTPClient的原因。

如果有人想看到这个问题,我会删除它,但如果有人真的想看到它,我会取消删除它。

HTML表单有5行数据,填充一行有点慢,单击提交5次vs填充5行,然后单击提交。我希望它会快一点,但如果不可能做到这一点,我会放弃这个。我希望有些人可以有洞察力。

2 个答案:

答案 0 :(得分:3)

试试这个:

HtmlForm Form = htmlPage.getHtmlElementById("form id");

答案 1 :(得分:1)

您可以将元素获取为DomElement(而不是InputElement)并设置其value属性:

HtmlPage mainPage = webClient.getPage(siteName);

DomElement e2empl1 = mainPage.getElementById("E2EMPL1");
if (e2empl1.getTagName().toLowerCase().equals("input")) {
    e2empl1.setAttribute("value", "value1");
}

DomElement e2empl2 = mainPage.getElementById("E2EMPL2");
if (e2empl2.getTagName().toLowerCase().equals("input")) {
    e2empl2.setAttribute("value", "value2");
}

(也许您可以跳过标记名检查)