Как загрузить файл в веб-браузер через всплывающее окно в браузере без головы в автоматизации (селен вебдрайвер) - PullRequest
0 голосов
/ 14 мая 2018

Мне нужно загрузить текстовый файл на мою веб-страницу (нажав «Обзор») через всплывающее окно «Селен».

Я использовал ниже класс робота, чтобы сделать это.

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 ]

0 голосов
/ 16 августа 2018

Исполнитель Java-скриптов и использование робота не являются надежными. Они работают и иногда выходят из строя.Я попробовал AutoIt, и он работает абсолютно нормально даже в браузере без головы.

0 голосов
/ 15 мая 2018

Когда вы выполняете свой код на бамбуке, вы, вероятно, используете удаленный драйвер.Для загрузки файла вы можете установить filepath с sendKeys в поле ввода файла и использовать fileDetector.

Решение:

Если у вас есть поле ввода файла

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

тогда следующий код установит filepath

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

Здесь у вас есть статья , описывающая решение.

Возможные проблемы, с которыми вы можете столкнуться:

  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';");
    
...