Ответ 1
Если вы находитесь за прокси-сервером, попробуйте сначала установить прокси-сервер, а затем запустите обновление webdriver:
npm config set proxy http://<proxy.com>:port
webdriver-manager update
Я установил транспортир после этот учебник, и когда я использую обновление webdriver-manager, он говорит:
selenium standalone is up to date.
chromedriver is up to date.
Когда я пытаюсь запустить тесты транспортира, он говорит:
C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\driverProviders\local.dp.js:42
throw new Error('Could not find chromedriver at ' +
^
Error: Could not find chromedriver at C:\Users\****\AppData\Roaming\npm\node_modules\protractor\selenium\chromedriver.exe
at LocalDriverProvider.addDefaultBinaryLocs_ (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\driverProviders\local.dp.js:42:15)
at LocalDriverProvider.setupEnv (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\driverProviders\local.dp.js:59:8)
at Runner.run (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\runner.js:308:31)
at process.<anonymous> (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\runFromLauncher.js:32:14)
at process.EventEmitter.emit (events.js:98:17)
at handleMessage (child_process.js:318:10)
at Pipe.channel.onread (child_process.js:345:11)
[launcher] Runner Process Exited With Error Code: 8
Я проверил local.dp.js и увидел, что он попытался загрузить хромированный рекордер из. \ node_modules\protractor\selenium\chromedriver, но там был только пустой почтовый файл с именем chromedriver_2.9.
Итак, я вручную загрузил хромированный указатель и скопировал его в это место, создав новую ошибку:
C:\Users\****\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1549
throw error;
^
Error: Server exited with 1
at Error (<anonymous>)
at ChildProcess.onServerExit (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\remote\index.js:193:11)
at ChildProcess.g (events.js:180:16)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at Process.ChildProcess._handle.onexit (child_process.js:797:12)
[launcher] Runner Process Exited With Error Code: 8
Любые идеи?
Если вы находитесь за прокси-сервером, попробуйте сначала установить прокси-сервер, а затем запустите обновление webdriver:
npm config set proxy http://<proxy.com>:port
webdriver-manager update
Я тоже столкнулся с этой ошибкой, и к моменту, когда я прочитал учебник, он не рассказал о том, как установить транспортир и webdriver в качестве локальных зависимостей для вашего проекта (которые находятся в. / node_modules).
Если это то, что вы предпочитаете (вероятно, потому, что вы, возможно, захотите использовать grunt-protractor-runner и запустить свой тест позже в режиме непрерывной сборки, как мне нужно) вместо того, чтобы устанавливать его глобально, это решение сработало для меня:
npm install protractor --save-dev
./node_modules/protractor/bin/webdriver-manager update
После вызова этой команды просмотрите ./node_modules/protractor
и вложенные папки, чтобы проверить это. В нем должна быть доступна папка с именем selenium
с chromedriver
.
Обратите внимание, что поскольку транспортир не был установлен как "глобальный", вызов его из командной строки приведет к ошибке "commnad not found".
Вместо этого вы можете запустить эту команду:
./node_modules/protractor/bin/protractor
Дополнительно, может быть хорошей идеей добавить определение script в ваш package.json, так что в следующий раз, когда вы установите все ваши зависимости с нуля, npm автоматически настроит webdrivers. Для этого добавьте это в свой файл package.json:
"scripts": {
"postinstall": "./node_modules/protractor/bin/webdriver-manager update"
}
Надеюсь, это поможет вам дальше...
Я следил за этим учебником и имел ту же проблему. Проблема здесь заключалась в том, что вам нужно указать путь к вашему selenium jar и chrome driver exe в файле конфигурации вашего транспортира. Mine была установлена глобально в папке AppData, так что это выглядит как файл protractor.confg.js:
exports.config = {
specs: [
'test/e2e/**/*.js'
],
chromeDriver: 'C:/Users/<username>/AppData/Roaming/npm/node_modules/protractor/selenium/chromedriver.exe',
seleniumServerJar: 'C:/Users/<username>/AppData/Roaming/npm/node_modules/protractor/selenium/selenium-server-standalone-2.40.0.jar',
baseUrl: 'http://localhost:9000/'
};
Казалось, что это трюк.
Боже, так много ответов...
На Mac это работало для меня:
$ npm install chromedriver
$ ln -sf ~/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/selenium/chromedriver.exe
Там GOT - лучший способ его исправления, но, по крайней мере, это позволяет мне двигаться дальше.
Посмотрев вокруг какое-то время, я заметил, что package.json
файл, включенный в angular phonecat repo, определяет задачу update-webdriver
.
Запуск этой задачи (с npm run update-webdriver
) фиксированным транспортиром для меня.
Драйвер Chrome может существовать в любом месте, но бегун-транспортитор, похоже, ожидает, что он будет находиться в том месте, где он будет существовать, если вы установили его через "webdriver-manager". Таким образом, его можно установить с помощью "npm install chromedriver", который поместит его в другое место, например: /USR/ локальные/Library/ node_modules/chromedriver/Library/chromedriver/chromedriver
В этом случае необходимо будет настроить файл конфигурации в этом месте, но есть более простое решение...
Если webdriver-manager не может загрузить либо хромированный, либо селеновый-независимый, то в по умолчанию будут 0-байтовые файлы, что приведет к этой ошибке. К сожалению, это может произойти с проблемами, связанными с прокси. Как только поврежденные файлы есть, процесс проверки обновлений считает, что все обновлено, но это не так.
Кроме того, конфигурация прокси для webdriver-менеджера отличается от npm. Для webdriver-manager синтаксис для обновления:
sudo webdriver-manager update --proxy=http://<your proxy server>/
Удаление файлов с 0 байтами и повторное выполнение этой команды обновления должны заменить файлы на их правильные данные. Место на моей машине для этих файлов:
/usr/local/lib/node_modules/protractor/selenium
Я столкнулся с подобной проблемой, когда я последовал за angular учебником:
https://docs.angularjs.org/tutorial/step_03
и проверили код соответственно:
git checkout -f step-3
Внутри angular -phonecat/package.json devDependencies версия protractor "~ 1.0.0", из-за которой npm всегда загружает поврежденный файл:
angular -phonecat/ node_modules/protractor/selenium/chromedriver_2.10.zip
Поскольку указанный выше zip файл не может быть открыт должным образом, значит, существует ошибка ниже:
/Users/karlli/DEV/проекты/angular -phonecat/node_modules/транспортир/node_modules/adm-zip/zipFile.js:66 throw Utils.Errors.INVALID_FORMAT; ^ Неверный или неподдерживаемый формат zip. Нет заголовка END
Существует 2 решения:
ln -sf ~/dev/projects/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/selenium/chromedriver.exe
Спасибо @bronson: -)
angular -phonecat/package.json
"devDependencies": {
"karma": "^0.12.16",
"karma-chrome-launcher": "^0.1.4",
"karma-jasmine": "^0.1.5",
"protractor": "~1.1.0",
"http-server": "^0.6.1",
"tmp": "0.0.23",
"bower": "^1.3.1",
"shelljs": "^0.2.6"
},
В моем случае это было связано с поврежденным zip файлом хромированного ребра.
Я решил сделать следующее для решения этой проблемы.
Скачан хромированный zip из Страница загрузки ChromeDriver
Извлечен этот zip файл в "node_modules\protractor\selenium \" (т.е. скопирован "chromedriver.exe" в это место)
Затем он начал работать как ожидалось. Надеюсь, это поможет вам.
Если в Windows вам может потребоваться установить переменную среды HTTP_PROXY
. Попробуйте выполнить эти шаги в командной строке, если ваш прокси-сервер http://proxy.you.com:8080
.
SETX HTTP_PROXY http://proxy.you.com:8080
(Он должен вернуть SUCCESS: указанное значение было сохранено. Вы также можете сделать это в свойствах System... Advanced... Environment Variables)webdriver-manager update
В mac osx измените версию в package.json для транспортира на "*", удалите node_modules и установите снова.
Отдельный файл selenium был поврежден, поэтому мне пришлось перезаписать его, скопировав его непосредственно в папку.
C:/Users/****/AppData/Roaming/npm/node_modules/protractor/selenium/
Также мне пришлось переименовать хромированный рекордер, поэтому он на самом деле называется "chromedriver", а не "chromedriver.exe".
C:/Users/****/AppData/Roaming/npm/node_modules/protractor/selenium/chromedriver
Это частично произошло, потому что я не установил прокси-сервер в webdriver. Вы можете увидеть Решение для этого в принятом ответе.
Для меня команды npm install
и npm run update-webdriver
просто продолжали загружать поврежденный файл Chromedriver_x.xx.zip
. Поэтому я попытался запустить webdriver-manager update
, и он сработал.
В Windows у меня возникли проблемы с проектом, который отлично работал на моем mac. Команда, которая, наконец, сделала это для меня, была:
node node_modules\protractor\bin\webdriver-manager update
Просто добавьте "preprotractor": "npm install chromedriver" к вашему package.json
Это будет загружать последнюю версию все время.