如何使用 HtmlUnit 以表单形式提交文件
How to submit file in form with HtmlUnit
我对这个表格有疑问
<form action="/incoming/Upload.cfg" enctype="multipart/form-data" method="post" onsubmit="return doSubmit();">
<table id="autoWidth" border="0" style="width: 100%;">
<tbody>
<tr>
<td class="h1" colspan="4" id="t_title">
Резервная копия и Восстановление
</td>
</tr>
<tr>
<td class="blue" colspan="4"/>
</tr>
<tr>
<td class="Item" id="t_backup">
Сохранить:
</td>
<td colspan="3">
<input type="button" class="buttonBigL" name="Backup" value="Резервная копия" onclick="location.href='config.bin';"/>
</td>
</tr>
<tr>
<td class="Item" id="t_file">
Файл:
</td>
<td>
<input class="text" name="filename" type="file" size="20" onkeydown="return false"/>
</td>
<td>
<input name="Restore" type="submit" class="buttonBigL" id="Submit" value="Восстановить"/>
</td>
<td width="100%">
</td>
</tr>
<tr>
<td class="blue" colspan="4"/>
</tr>
</tbody>
</table>
</form>
我想插入 "Backup" 文件并提交表单(在浏览器中单击 "Restore button")。代码。
private String model = "src/test/resources/config.bin";
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setTimeout(20000);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.setConfirmHandler(new ConfirmHandler() {
public boolean handleConfirm(Page page, String message) {
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1123");
return true;
}
});
final HtmlPage frame = ((HtmlPage) page.getFrameByName("frame").getEnclosedPage());
List<HtmlForm> forms = mainFrame.getForms();
HtmlForm htmlForm = forms.get(0);
htmlForm.<HtmlFileInput>getInputByName("filename").setValueAttribute(model);
htmlForm.<HtmlFileInput>getInputByName("filename").setContentType("multipart/form-data");
HtmlPage page = (HtmlPage) mainFrame.executeJavaScript("return doSubmit()").getNewPage();
当我执行 JS 时出现错误
StrictErrorReporter: error: message=[invalid return]
sourceName=[injected script] line=[1] lineSource=[return doSubmit()]
lineOffset=[7]
当我使用
htmlForm.getInputByName("Restore").click();
什么都没发生
代码正在运行,过载消失了。但是我 运行 在 spring 容器中进行测试,由于某种原因我得到了这个错误。
@RunWith(SpringRunner.class)
@SpringBootTest
如果你 运行 没有 spring 一切正常。
htmlForm.<HtmlFileInput>getInputByName("filename").setValueAttribute(model);
htmlForm.<HtmlFileInput>getInputByName("filename").setContentType("multipart/form-data");
HtmlPage restore = htmlForm.getInputByName("Restore").click();
刷新
问题是 - “目标服务器无法响应异常。”
我在
中避免了这种情况
webClient.getOptions().setTimeout(20000);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setRedirectEnabled(true);
决定
我对这个表格有疑问
<form action="/incoming/Upload.cfg" enctype="multipart/form-data" method="post" onsubmit="return doSubmit();">
<table id="autoWidth" border="0" style="width: 100%;">
<tbody>
<tr>
<td class="h1" colspan="4" id="t_title">
Резервная копия и Восстановление
</td>
</tr>
<tr>
<td class="blue" colspan="4"/>
</tr>
<tr>
<td class="Item" id="t_backup">
Сохранить:
</td>
<td colspan="3">
<input type="button" class="buttonBigL" name="Backup" value="Резервная копия" onclick="location.href='config.bin';"/>
</td>
</tr>
<tr>
<td class="Item" id="t_file">
Файл:
</td>
<td>
<input class="text" name="filename" type="file" size="20" onkeydown="return false"/>
</td>
<td>
<input name="Restore" type="submit" class="buttonBigL" id="Submit" value="Восстановить"/>
</td>
<td width="100%">
</td>
</tr>
<tr>
<td class="blue" colspan="4"/>
</tr>
</tbody>
</table>
</form>
我想插入 "Backup" 文件并提交表单(在浏览器中单击 "Restore button")。代码。
private String model = "src/test/resources/config.bin";
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setTimeout(20000);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.setConfirmHandler(new ConfirmHandler() {
public boolean handleConfirm(Page page, String message) {
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1123");
return true;
}
});
final HtmlPage frame = ((HtmlPage) page.getFrameByName("frame").getEnclosedPage());
List<HtmlForm> forms = mainFrame.getForms();
HtmlForm htmlForm = forms.get(0);
htmlForm.<HtmlFileInput>getInputByName("filename").setValueAttribute(model);
htmlForm.<HtmlFileInput>getInputByName("filename").setContentType("multipart/form-data");
HtmlPage page = (HtmlPage) mainFrame.executeJavaScript("return doSubmit()").getNewPage();
当我执行 JS 时出现错误
StrictErrorReporter: error: message=[invalid return] sourceName=[injected script] line=[1] lineSource=[return doSubmit()] lineOffset=[7]
当我使用
htmlForm.getInputByName("Restore").click();
什么都没发生
代码正在运行,过载消失了。但是我 运行 在 spring 容器中进行测试,由于某种原因我得到了这个错误。
@RunWith(SpringRunner.class)
@SpringBootTest
如果你 运行 没有 spring 一切正常。
htmlForm.<HtmlFileInput>getInputByName("filename").setValueAttribute(model);
htmlForm.<HtmlFileInput>getInputByName("filename").setContentType("multipart/form-data");
HtmlPage restore = htmlForm.getInputByName("Restore").click();
刷新
问题是 - “目标服务器无法响应异常。” 我在
中避免了这种情况 webClient.getOptions().setTimeout(20000);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setRedirectEnabled(true);
决定