HtmlUnit:如何在其他选项之后选择选项

时间:2017-06-27 16:24:29

标签: htmlunit

我尝试在下拉菜单中选择其他选项之前选择其中一个下拉菜单中的元素。

选项列表:optionstemplate,此列表是在选择了一个optionsProtocole之后创建的。

  

错误:java.lang.IndexOutOfBoundsException:索引:0,返回大小:0。

/// Select protocole

HtmlSelect selectFieldProtocole = (HtmlSelect) page.getElementByName("protocolNameID");
List<HtmlOption> optionsProtocole = selectFieldProtocole.getOptions();
HtmlOption theOptionProtocole = null;

for (HtmlOption option : optionsProtocole) {
    if (option.getText().equals("dd")) {
        theOptionProtocole = option;
    }
}

selectFieldProtocole.setSelectedAttribute(theOptionProtocole, true);

//// select version

HtmlSelect selectFieldtemplate = (HtmlSelect) page.getElementByName("protocolVersion");

List<HtmlOption> optionstemplate = selectFieldtemplate.getOptions(); 
HtmlOption theOptiontemplate = null;            

for (HtmlOption option : optionstemplate) {
    System.out.println("ma version " + option.getText());

    if (option.getText().equals("dd-V2.1.3")) {
        theOptiontemplate = option;
    }
}

System.out.println("ma version " + optionstemplate.get(0).getText());
// line before return error size zero so,line following don't work 
selectFieldtemplate.setSelectedAttribute(theOptiontemplate, true);

HTML:

<div id="Upload file">
    <form action="http://qa2tsqat23101v-int.devqa.exch.int/minos/index.php/injector/MateloUpload" method="post" enctype="multipart/form-data">
        <div id="protocolNameID">
            <label for="protocolNameID"> Protocol Name </label>
            <select name= "protocolNameID" class="protocol_choice" url="http://qa2tsqat23101v-int.devqa.exch.int/minos/index.php/injector/project/choose_protocolNameID/118">
                <option selected="selected" value= 'NULL'>  </option>
                <option value= "127"></option>
                <option value= "19">ARCADIRECT</option>
                <option value= "134">BIN 2</option>
                <option value= "112">BIN MTF</option>
                <option value= "131">Copy ARCADIRECT 2.6W</option>
                <option value= "130">copy Fix4.2</option>
                <option value= "125">copy_test</option>
                <option value= "126">copy_test</option>
                <option value= "116">dd</option>
                <option value= "119">dd - v1.13.0</option>
                <option value= "120">dd 1.13.0-6</option>
                <option value= "117">dd-v1.8.21</option>
                <option value= "8">FIX</option>
                <option value= "114">FOUNDATION</option>
                <option value= "115">Foundation</option>
                <option value= "110">FULL BINARY</option>
                <option value= "118">FullTestCases_5.4.1.s19_ME_CANO1_Limit8_full</option>
                <option value= "999">INTERNAL</option>
                <option value= "122">MIFID2 BIN</option>
                <option value= "123">MIFID2 FIX</option>
                <option value= "999">TBD</option>
                <option value= "121">tccmi</option>
                <option value= "109">TCS BIN</option>
                <option value= "108">TCS FIX</option>
                <option value= "128">TESTTT</option>
                <option value= "129">TESTTTTT</option>
                <option value= "111">UTP DIRECT</option>
                <option value= "132">WSE BIN</option>
                <option value= "133">WSE BIN 2</option>
                <option value= "135">WSE FIX Test</option>
                <option value= "113">XDP D</option>      
            </select>
            <input type="hidden" id="currentNameID" name="currentNameID" value= "" >
        </div>
        <div id="protocolVersion">
            <label for="protocolVersion"> Version </label>
            <select name= "protocolVersion" class="protocol_choice2"></select>
            <input type="hidden" id="currentVersion" name="currentVersion" value="">
        </div>

1 个答案:

答案 0 :(得分:0)

如果您想模拟用户从列表中选择某些内容,则必须使用您想要选择的HtmlOption作为起点。 一般来说:

  1. 找到您要选择的HtmlOption
  2. 使用myOption.setSelected(true)
  3. 选择此选项

    这将为您完成所有必需的后台工作(包括取消选择或其他选项,如果需要和事件触发)。 请记住,更改选择不会反映在dom属性中。因此,当使用例如page.asXML你仍会看到与之前相同的代码(所选属性仍在原始位置)。如果您想检查选择,则必须使用javascript或isSelected方法作为选项。或者,您可以启用HttpClient线路记录并检查线路上的提交值。