Используйте Fluentlenium для загрузки файла в dropzone.js

Я хочу написать тест для загрузки файла с помощью Fluentlenium и DropZone.js ( http://www.dropzonejs.com/). Dropzone.js работает в модальном режиме, а затем вы можете перетащить или загрузить обычным способом.

Как только вы нажимаете, чтобы загрузить тест, происходит сбой, потому что вы больше не в браузере.

Я нашел много сообщений о том, как это работает в Selenium, используя такие вещи, как:

WebElement fileInput = driver.findElement(By.xpath("//input[@type='file']"));
fileInput.sendKeys("C:/path/to/file.jpg");

Однако я не могу отправить ключи ни к чему, потому что они даже не являются типом ввода ="file" при использовании DropZone.js.

Единственные типы ввода, которые я вижу, все скрыты.

<input type="hidden" name="key" value="temp/${filename}">
<input type="hidden" name="AWSAccessKeyId" value="secret">
<input type="hidden" name="acl" value="private">
<input type="hidden" name="success_action_redirect" value="">
<input type="hidden" name="policy" value="secret=">
<input type="hidden" name="signature" value="secret">
<input type="hidden" name="Content-Type" value="application">

Мы также используем Amazon Web Server для загрузки документов, похоже, что все работает по следующему сценарию:

<script id="hiddenKeyPairs" type="text/javascript">
  var hiddenKeyPairs = {
    key:  'temp/${filename}',
    AWSAccessKeyId: 'secret',
    acl: 'private',
    "success_action_redirect": '',
    policy: 'secret',
    signature: 'secret/secret',
    "Content-Type": 'application'
  };

  var formAction = 'https://secret.com/';

</script>

Который находится на моей странице.

Я не вижу ничего полезного на https://github.com/FluentLenium/FluentLenium для этого.

Нужно ли как-то отправлять файл на ключ хэша в приведенном выше скрипте?

Какие-нибудь мысли?

1 ответ

Я не уверен насчет части AWS, но у меня есть похожий вопрос о загрузке файлов ( программная загрузка / добавление файлов через Dropzone, например, Selenium) и некоторых потенциальных решениях. Я чувствую, что они не очень крепкие, но в основном:

Подход 1. Использование Java Robot для симуляции действий графического интерфейса -

    // this opens the file browser window
    driver.findElement(By.id("uploadDropzone")).click();

    // put the file path in clipboard, paste (C-V) to the window, enter.
    StringSelection ss = new StringSelection("some file path");
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
    Robot robot = new Robot();
    Thread.sleep(2000);
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_CONTROL);
    Thread.sleep(5000);    // need some wait for GUI action to work...
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER)

Подход 2: Делать все в коде (хакки...) - да, есть элемент ввода файла, но он определен только в самом Dropzone.js, который можно выбрать с помощью $(".dz-hidden-input"), Но вы также должны сделать его видимым (поскольку Selenium может воздействовать только на видимые элементы), а затем можете вызвать sendKeys в теме. И после этого, снова в Javascript, получить File объект из этого элемента, а затем перейти к addFile(file) на объекте Dropzone.

Другие вопросы по тегам