Я пишу тесты для своего приложения AngularJS, используя транспортир и жасмин.
Я тестирую загрузку файла, используя приведенный ниже код:
const fileElem = element(by.css('input[type = "file"]'));
fileElem.sendKeys(absoluteFilePath);
browser.sleep(500);
Это работает локально со следующими пакетами:
"chromedriver": "2.38.2", "protractor": "5.3.1", Chrome - v.66.0.3359.139
Но когда я запускаю эти тесты на GitLab CI, я получаю сообщение об ошибке:
[chrome #01] F ✗ should upload the file
[chrome #01] - Failed: unknown error: session deleted because of page crash
[chrome #01] from unknown error: cannot determine loading status
[chrome #01] from tab crashed
[chrome #01] (Session info: headless chrome=65.0.3325.181)
[chrome #01] (Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Linux 4.13.5-coreos-r2 x86_64)
Я использую директиву ng-file-upload.
Спасибо за вашу помощь!
@yong загружает файл об изменении модели. Итак, в этой строке: fileElem.sendKeys(absoluteFilePath);
Он меняет модель и выгружает файл. Локально работает нормально.
Загруженный файл также существует на удаленном компьютере?
Файл находится в папке с проектом. Он существует на удаленной машине.
Я думаю, вы столкнетесь с той же проблемой, какой бы файл вы ни выбрали для загрузки, вы можете попытаться доказать мое предположение. Если да, то я могу понять первопричину.
Я могу сказать вам свое предположение о первопричине. При вводе пути к файлу через sendKeys
модель обнаружит изменение при вводе каждого символа. Таким образом, если длина пути к файлу равна 10, модель обнаружит 10-кратное изменение. Каждый раз, когда смена модели запускает загрузку файла. Но первые 9 раз путь к файлу неверен, поэтому частая загрузка файлов приводит к сбою браузера.
sendKeys
вводит строковый символ за символом, модель обнаружит изменение при вводе каждого символа. Таким образом, если путь к файлу имеет 10 символов, модель обнаружит 10-кратное изменение. Каждый раз, когда смена модели запускает загрузку файла. Но первые 9 раз путь к файлу неверен, поэтому частая загрузка файлов приводит к сбою браузера.
const fileElem = element(by.css('input[type = "file"]'));
// input file path by javascript in silent to avoid multiple model change
browser.executeScript(
'arguments[0].value=arguments[1];',
fileElem.getWebElement(),
absoluteFilePath
);
// input a blank space at the end of file path
// to let model detect change, then trigger file uploading.
fileElem.sendKeys(" ");
Не работает. Мы не можем установить <input type = "file">
из javascript
.
У меня была такая же проблема при запуске селена на моем vps. Через 5 часов я обнаружил, что слишком много незакрытых попыток использовать драйвер. попробуй убить их всех
pkill -f chrome*
Данный код не включает часть, чтобы нажать кнопку «Отправить», чтобы начать загрузку. Итак, проблема связана с этой строкой:
fileElem.sendKeys(absoluteFilePath
или во время процесса загрузки?