使用SeleniumHtmlUnitDriver无头网络驱动程序上传文件



我正在尝试将本地文件(C:\sample.txt)上传到我的服务器。我试着用Chrome网络驱动程序来实现它,它运行得非常好。但在使用HTMLUnitDriver实现相同功能的过程中,我无法从本地磁盘浏览文件项。我也尝试了以下两种方法,

1) 发送密钥:

WebElement inputFile = driver.findElement(By.id("file"));
System.out.println(driver.getCurrentUrl());
LocalFileDetector detector = new LocalFileDetector();
String path = "C:\UploadSample1.txt";
File f = detector.getLocalFile(path);
inputFile.sendKeys(f.getAbsolutePath());

2) 使用机器人:

WebElement browseFile = fluentWait(By.id("browseFile"), driver);
browseFile.click();
File file = new File("C:\UploadSample1.txt");
driver.switchTo().activeElement();
StringSelection fileNameToWrite = new StringSelection(
file.getAbsolutePath());
Toolkit.getDefaultToolkit().getSystemClipboard()
.setContents(fileNameToWrite, null);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

我需要浏览文件项,然后只有我才能将其保存到我的服务器上。因为只发送文件路径将搜索服务器磁盘中的文件。现在我真的被卡住了,不能再往前走了。

非常感谢您的帮助。谢谢!

如果您需要先浏览到文件,这是不可能的IMHO;为此,您将需要AutoIT(因为不推荐使用机器人类)。因此,您最好的选择是使用sendKeys发送文件路径。

formInput.setValueAttribute(formValue);对我来说很好。

代码片段:

Iterator<String> formValueIterator =  formValues.keySet().iterator();
while(formValueIterator.hasNext()){
String formKey = formValueIterator.next();
String formValue = formValues.get(formKey);
HtmlInput formInput =  form.getInputByName(formKey);
if (formInput != null)
if (formInput instanceof HtmlPasswordInput) {
((HtmlPasswordInput)formInput).setValueAttribute(formValue);
} else {
formInput.setValueAttribute(formValue);
}
}

相关内容

  • 没有找到相关文章

最新更新