Используйте 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.