Как проверить загрузку файла flow.js с помощью Selenium?
У меня есть AngularJS SPA, где пользователь может загружать файлы, используя flow.js, точнее, я использую его оболочку ng-flow.
Сейчас я настраиваю автоматизированные тесты e2e с помощью Selenium, но я не могу понять, как проверить вышеупомянутый механизм загрузки, ни когда пользователь нажимает на flow-btn
элемент, ни когда он использует перетаскивание.
Поглядывая вокруг, я нашел эту страницу, которая говорит, что веб-драйвер не может распознать диалоговое окно, открытое после нажатия кнопки flow-btn
, но, так как этот самый последний не является <input>
элемент, но просто <span>
(единственный способ использовать flow-btn
), Я не могу использовать решение, предлагаемое на связанной странице.
Любая идея о том, как проверить загрузку файла flow.js с помощью Selenium?
2 ответа
Вот рабочий пример загрузки текущего скрипта в загрузку, реализованную с flowjs
:
const remote = require('selenium-webdriver/remote');
const path = require('path');
browser.ignoreSynchronization = true;
browser.setFileDetector(new remote.FileDetector);
describe('test suite', function() {
it('should upload a file remotely', function() {
browser.get('http://flowjs.github.io/ng-flow/');
element(by.xpath("//span[.='Upload File']/input"))
.sendKeys(path.resolve(__dirname, __filename));
browser.sleep(5000);
expect(element.all(by.css("div[ng-repeat='file in $flow.files']")).count()).toEqual(1);
});
});
Не уверен, поможет ли это... мы используем nightwatch.js для тестирования нашего приложения и используем кнопку загрузки flowJS для отдельных файлов.
Чтобы это работало, мне нужно было сделать скрытый ввод данных видимым и активным. Тогда я мог бы заполнить его местоположением файла и отправить.
Некоторые примеры nightwatch.js
//Re-enable traditional file-input
this.api.execute(function () {
document.getElementById('proof-upload-fallback').className = '';
document.getElementById('proof-upload-fallback').disabled = false;
});
this.api.setValue('//input[@id="proof-upload-fallback"]', require('path').resolve(filePath));
//Click upload
this.api.clickModalButton('Upload');
наш HTML выглядит так:
<input id="proof-upload-fallback" type="file" flow-btn="" ng-show="false" ng-disabled="true" class="ng-hide" />
<button flow-btn="" focus-input="focusButton">Select PDF<input type="file" style="visibility: hidden; position: absolute; width: 1px; height: 1px;"></button>
Submit: <button ng-click="ok()">Upload</button>
Ng-click="ok" отвечает за обработку файла flow.js, важной частью кода является execute(), который JS передает фактическому веб-приложению через драйвер селена...