有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我需要通过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);

       }

它在我的本地工作得很好。但是当我通过bamboo计划运行这个时,它并没有像竹子一样运行headless browser中的代码

有人能建议我如何在headless browser上传文件吗


共 (2) 个答案

  1. # 1 楼答案

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

    解决方案:

    如果您有文件输入字段

    <input id="fileinputfield" type="file">
    

    然后下面的代码将设置文件路径

    remoteWebDriver.setFileDetector(new LocalFileDetector());
    WebElement input = remoteWebDriver.findElement(By.id("fileinputfield"));
    input.sendKeys(filePath);
    

    Here you have an article描述解决方案

    您可能遇到的问题:

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

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

      <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';");
      
  2. # 2 楼答案

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