Java 如何在automation(selenium webdriver)中通过无头浏览器中的窗口弹出窗口将文件上载到web浏览器

Java 如何在automation(selenium webdriver)中通过无头浏览器中的窗口弹出窗口将文件上载到web浏览器,java,selenium-webdriver,bamboo,awtrobot,headless-browser,Java,Selenium Webdriver,Bamboo,Awtrobot,Headless Browser,我需要通过selenium中的弹出窗口将文本文件上传到我的网页(通过单击浏览) 我用机器人课下面的动作来做这件事 public void uploadFileUsingRobot(String filePath) throws AWTException,Exception{ StringSelection path = new StringSelection(filePath); Toolkit.getDefaultToolkit().getSystem

我需要通过selenium中的弹出窗口将文本文件上传到我的网页(通过单击浏览)

我用机器人课下面的动作来做这件事

public void uploadFileUsingRobot(String filePath) throws AWTException,Exception{

          StringSelection path = new StringSelection(filePath);
          Toolkit.getDefaultToolkit().getSystemClipboard().setContents(path, null);

              Robot r = new Robot();

              r.keyPress(KeyEvent.VK_ENTER);
              r.keyRelease(KeyEvent.VK_ENTER);

              r.keyPress(KeyEvent.VK_CONTROL);    
              r.keyPress(KeyEvent.VK_V);

              r.keyRelease(KeyEvent.VK_V);    
              r.keyRelease(KeyEvent.VK_CONTROL);

              r.keyPress(KeyEvent.VK_ENTER);
              r.keyRelease(KeyEvent.VK_ENTER);

       }
它在我的本地工作得很好。但是,当我通过
bambol
计划运行此程序时,在
headless browser
中运行代码并不像bambol那样有效


有谁能建议我如何在
无头浏览器中上传文件

当您在竹子上执行代码时,您可能使用远程驱动程序。要上载文件,可以使用sendKeys将filepath设置为文件输入字段,并使用fileDetector

解决方案:

如果您有文件输入字段

<input id="fileinputfield" type="file">
描述解决方案

您可能遇到的问题:

  • 获取remoteWebDriver。这里有一种方法你可以试试

    RemoteWebDriver remoteWebDriver = (RemoteWebDriver) ((WebDriverFacade) getDriver()).getProxiedDriver();
    
  • 隐藏(未显示)文件输入字段。如果html是:

    <input id="fileinputfield" style="display:none;" type="file">
    

  • Java脚本执行器和使用robot并不健壮。它们正在工作,有时会失败。我试过AutoIt,即使在无头/远程浏览器中,它也工作得非常好

    <input id="fileinputfield" style="display:none;" type="file">
    
    JavascriptExecutor js = (JavascriptExecutor) getDriver();
    js.executeScript("document.getElementById('filedata').style.display='inline-block';");
    
    // RemoteWebDriver remoteWebDriver = (RemoteWebDriver) ((WebDriverFacade) getDriver()).getProxiedDriver();
    // remoteWebDriver.setFileDetector(new LocalFileDetector());
    // WebElement input = remoteWebDriver.findElement(By.id("fileinputfield"));
    // input.sendKeys(filePath);
    
    js.executeScript("document.getElementById('filedata').style.display='none';");