Как проверить загрузку файла 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 передает фактическому веб-приложению через драйвер селена...

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