自动将文件上传到网站,无需浏览器焦点



我致力于测试脚本以自动将文件上传到站点并以无头模式执行脚本。它需要逐个上传文件列表,我根据Selenium WebDriver开发它。我使用AutoIT脚本来处理对话框窗口,文件选择器窗口。参数$CmdLine[1]包含实际文件的路径。

ControlFocus("Open a file","","Edit1")
ControlSetText("Open a file","","Edit1", $CmdLine[1])
ControlClick("Open a file","","Button1")

它使用以下代码执行:

Runtime.getRuntime().exec(autoITExecutable);

它会打开对话框窗口,因此如果不将焦点放在浏览器窗口上,它就无法工作。java.awt.Robot类的工作方式类似,它需要关注浏览器窗口。

我也尝试使用sendKeys()方法,但输入字段无法以这种方式处理文件。Katalon Studio也无法处理此字段。

具有类似表单的示例网站:

http://ajaxuploader.com/demo/simple-upload.aspx

https://ec.europa.eu/cefdigital/DSS/webapp-demo/validation

https://tus.io/demo.html

您可以尝试以下代码:

// wait for the window to appear
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.alertIsPresent());
// switch to the file upload window
Alert alert = driver.switchTo().alert();
// enter the filename
alert.sendKeys(fileName);
// hit enter
Robot r = new Robot();
r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);
// switch back
driver.switchTo().activeElement();

试试这个,

webElement.sendKeys(System.getProperty("user.dir") + "file path");

这里

  • webElement 是您在文件上传中标识的元素。请确保输入元素可见。
  • 尝试将文件路径指定为我们要上传的内容的相对路径。

确保您没有单击浏览按钮,单击浏览按钮将打开Windows对话框,其中硒网络驱动程序将不起作用。

直接使用硒:

driver().findElement(By.id("ContentPlaceHolder1_Uploader1__Insert")).sendKeys(pathToFile);

有了这个,您可以避免使用系统依赖对话框。

最新更新