Невозможно загрузить файл (загрузка ng-файла) в браузере Firefox с транспортиром?

Я работаю над автоматизацией тестирования углового приложения, используя транспортир + жасмин, и мы использовали загрузчик ng-file для загрузки файлов в наше приложение. Сценарий автоматизации успешно загружает файл в браузере Chrome, но не работает в браузере Firefox, и я получаю следующую ошибку:

Сообщение: Ошибка: элемент в настоящее время не виден, поэтому с ним нельзя взаимодействовать.

Стек: ElementNotVisibleError: элемент в настоящее время не виден, поэтому с ним нельзя взаимодействовать

Фрагмент кода для загрузки файла

this.uploadFile = function (uploadFile) {
    var fileToUpload = uploadFile;
    var absolutePath = path.resolve(__dirname, fileToUpload);
    $('input[type="file"]').sendKeys(absolutePath);
    element(submitBtn).click();
};

<label style="visibility: hidden; position: absolute; overflow: hidden; width: 0px; height: 0px; border: medium none; margin: 0px; padding: 0px;" tabindex="-1">
upload
<input id="ngf-{{ id }}" type="file" ngf-change="onChange($file)" ngf-keep="{{ keep }}" required="required" ngf-validate="{{ validate }}" ngf-pattern="{{ pattern }}" ngf-accept="{{ allowedMime }}" ngf-multiple="{{ multipleAllowed }}" ngf-model-invalid="invalid" ng-model-options="{ allowInvalid: multipleAllowed }" ng-model="files" ngf-select="" ngf-drop="" name="{{ name }}" accept=".csv,text/plain,application/vnd.ms-excel"/>

Any help would be greatly appreciated!!


person vsathyak    schedule 08.08.2016    source источник
comment
согласно моему опыту, ошибка «Элемент в настоящее время не виден» предполагает, что элемент, с которым вы пытаетесь взаимодействовать, не отображается в текущем представлении. Также может быть проблема с разрешением. Можете ли вы подтвердить, действительно ли элемент находится в поле зрения, когда вы взаимодействуете с ним?   -  person TypeScripter    schedule 08.08.2016
comment
элемент скрыт.   -  person vsathyak    schedule 08.08.2016
comment
Какой драйвер Firefox вы используете, и это локальный или удаленный сеанс?   -  person Florent B.    schedule 08.08.2016
comment
Местный. Версия Firefox 45.3.0 (версия ESR)   -  person vsathyak    schedule 08.08.2016


Ответы (1)


Уууу..!! Наконец-то я исправил проблему и смог загрузить файл в браузер Firefox.

Пожалуйста, смотрите код:

this.uploadFile = function (uploadFile) {
    if(browser.browserName === 'firefox') {
        browser.executeAsyncScript(function(callback) {
            document.querySelectorAll('body>label')[0].setAttribute('style', 'position: absolute');
            callback();
        });
    }
    var fileToUpload = uploadFile;
    var absolutePath = path.resolve(__dirname, fileToUpload);
    $('input[type="file"]').sendKeys(absolutePath);
    element(uploadBtn).click();
};

А чтобы получить имя браузера, добавьте в файл conf.js следующее:

onPrepare: function () {
    browser.driver.getCapabilities().then(function(caps){
        browser.browserName = caps.get('browserName');
    });
}

Также обратите внимание, что document.querySelectorAll('body>label')[0].setAttribute('style', 'position: absolute'); удалит все атрибуты в моем скрытом теге метки, сделав мой входной тег (дочерний тег метки) видимым, и установит абсолютную позицию.

Таким образом, firefox не выдаст ошибку: элемент в настоящее время не виден, и поэтому с ним нельзя взаимодействовать.

person vsathyak    schedule 08.08.2016