#macos #selenium #webdriver #selenium-chromedriver #apple-silicon
#macos #селен #webdriver #selenium-chromedriver #apple-silicon
Вопрос:
Внезапно во второй половине дня 6 января 2021 года мои тесты Selenium Protractor в OSX перестали работать с загадочной ошибкой
spawn Unknown system error -86
Я провел некоторое исследование и обнаружил, что номер ошибки 86 совпадает с
Bad CPU type in executable
и выполнил следующее, чтобы сравнить архитектуру процессора моего двоичного файла chromedriver с моей системой:
% file chromedriver_87.0.4280.88
chromedriver_87.0.4280.88: Mach-O 64-bit executable arm64
% uname -a
Darwin kobl179273m 19.6.0 Darwin Kernel Version 19.6.0: Thu Oct 29 22:56:45 PDT 2020; root:xnu-6153.141.2.2~1/RELEASE_X86_64 x86_64
% uname -p
i386
Как я могу исправить двоичный файл chromedriver, используемый моим Selenium, чтобы он запускался на моем Intel x64 mac и очищал сообщение «системная ошибка -86» или «Неправильный тип процессора»?
Комментарии:
1. Похоже, что chromedriver теперь поддерживает архитектуру Apple Silicon ARM, а «обновление webdriver-manager —versions.chrome=<version>» теперь всегда использует сборку chromedriver arm64 из chromedriver.storage.googleapis.com вместо сборки x86_64. Я пытаюсь выяснить, как заставить webdriver-manager вместо этого загрузить сборку intel x86.
2. Проблема в том, что до версии chrome 86 была только одна версия для mac64 chromedriver. Но начиная с версии Chrome 87. Для chrome mac64 и mac64_ml есть два двоичных файла. Загружается только mac64_ml, который предназначен для arm64 arch, поэтому исправление необходимо выполнить в webdriver_manager chrome_xml.js .
3. Существует открытая проблема. github.com/angular/webdriver-manager/issues/476
4. Кстати, совершенно случайно, что код ошибки 86 можно исправить, откатившись к Chrome 86
Ответ №1:
Проблема описана в https://github.com/angular/webdriver-manager/issues/476 . Теперь это исправлено в 12.1.8, поэтому просто обновите этот webdriver manager.
Для большинства пользователей это может быть достигнуто с помощью
npm uninstall protractor amp;amp; npm install protractor
Комментарии:
1. Я запустил новую
npm install
версию с последней версией Protractor, и это исправило ее. Спасибо.2. Я отмечаю это как предпочтительный ответ, поскольку, хотя информация в моем другом ответе может быть полезна всем, кто в будущем получит unkonwn system error -86, для большинства людей, которые видят ошибку из-за выпуска Chromedriver _m1 Silicon Arm, самым простым решением будет продолжить и обновитьк более новой версии protractor и webdriver-manager, которая исправляет это.
3. Для некоторых это может быть здравым смыслом, но мне пришлось зайти в usr/local/lib/node_modules моего mac и удалить
webdriver-manager
каталог перед запускомnpm install
. После того, как я это сделал, все заработало. Кстати, повторная установка оказалась в корзине моего недавно установленного каталога .nvm, найденного при запускеwhich webdriver-manager
.
Ответ №2:
Редактировать: этот ответ следует считать устаревшим теперь, когда основная ошибка в webdriver-manager была исправлена. Лучшим решением было бы перейти на новейшую версию webdriver-manager. Приведенный ниже ответ может быть полезен, если людям нужно использовать более старую версию webdriver-manager, в которой все еще есть ошибка.
Согласно комментарию Дипака Шринивасана выше, эта ошибка вызвана https://github.com/angular/webdriver-manager/issues/476
Основная причина: команда ChromeDriver добавила «_m1» в конец имени файла для своих Apple Silicon ARM-версий Chromedriver, но и в версиях chromedriver для Silicon, и для Intel в имени файла указано «mac64», а номер версии точно такой же. Это приводит к тому, что webdriver-manager всегда загружает кремниевую сборку Chromedriver, даже на компьютерах Intel Mac. В качестве общего решения просто избегайте использования chromedriver с именем файла _m1, если вы используете Intel Mac.
Решение 1. Понизьте версию до Chrome 86.0.4240.198 и Chromedriver 86.0.4240.22. Эти версии работают вместе и являются самыми последними версиями до появления новой и проблемной поддержки Silicon ARM.
Страница загрузки Chrome 86: https://google-chrome.en.uptodown.com/mac/download/2920124
Отключить автоматическое обновление в Chrome: https://superuser.com/questions/1359017/how-do-i-disable-automatic-updates-of-google-chrome-on-mac-os-x
Хромированный привод 86: https://chromedriver.storage.googleapis.com/index.html?path=86.0.4240.22 /
% webdriver-manager update --versions.chrome=86.0.4240.22
Решение 2. Измените пакет npm webdriver-manager, чтобы указать на правильный chromedriver (спасибо ciekaway со страницы проблем angular github за это исправление)
Измените следующий файл
node_modules/webdriver-manager/built/lib/files/file_manager.js
или, если используется транспортир
node_modules/protractor/node_modules/webdriver-manager/built/lib/files/file_manager.js
В верхней части метода DownloadFile около строки 166 добавьте следующую строку, чтобы удалить «_m1» из имени файла:
fileUrl.url = fileUrl.url.replace(/_m1/, '');
Это должно быть после начала .затем блок, который начинается с
binary.getUrl(binary.version()).then(fileUrl => {
это также должно быть перед следующей ссылкой на fileURL.
Например:
binary.getUrl(binary.version()).then(fileUrl => {
binary.versionCustom = fileUrl.version;
fileUrl.url = fileUrl.url.replace(/_m1/, '');
let filePath = path.resolve(outputDir, binary.filename());
Обратите внимание, что это решение является временным. Он будет перезаписан при установке npm. Chromedriver и / или команда webdriver-manager, вероятно, устранят эту проблему, после чего вам следует очистить модифицированную версию вашего webdriver-manager и загрузить исправление из npm.
Комментарии:
1. Пытался сделать это с помощью решения 1, но позже получил ошибку при попытке запустить тест транспортира. Ошибка: E / launcher — SessionNotCreatedError: не удалось создать новую службу: ChromeDriverService. Информация о драйвере: driver.version: неизвестно
2. Оказалось, мне пришлось указать версию, например: webdriver-manager start —versions.chrome 86.0.4240.22
3. Я попробовал решение 1, но я получаю ту же ошибку, что и @user1328889. Я использовал ./node_modules/.bin/webdriver-manager start —versions.chrome= 86.0.4240.198, но это дало мне эту ошибку: E /start — Selenium Standalone отсутствует. Установка с обновлением webdriver-manager — автономная. Я вижу selenium-server-standalone-3.141.59.jar однако в моей папке selenium.
4. Еще одна проблема с решением № 1 заключается в том, что Chrome продолжает автоматическое обновление до версии 88 даже после отключения обновлений. В настройках Chrome отображается 86, но при щелчке правой кнопкой мыши на информации о приложении вы можете увидеть, что версия 88. Из-за этого тесты завершаются с ошибкой: essionNotCreatedError: сессия не создана: эта версия ChromeDriver поддерживает только версию Chrome 86 Текущая версия браузера 88.0.4324.96 с двоичным путем / Applications/ Google Chrome.app/Contents/ macOS / Google Chrome
5. Спасибо @emery. Я попробовал npm uninstall protractor amp;amp; npm install protractor, и теперь он работает.
Ответ №3:
Для macOS Catalina версии 10.15.6 (19G73)
В моем случае я работал с Rails и Capybara для тестирования функций. То, что сработало для меня, было
- Сначала найдите фактическое местоположение запущенного chromedriver:
which chromedriver # Which returned: /Users/alex/.webdrivers/chromedriver
- Затем установите chromedriver через Homebrew:
brew install chromedriver
- Затем удалите старую ссылку на chromedriver, найденную в предыдущем местоположении с помощью:
rm /Users/alex/.webdrivers/chromedriver
- Теперь свяжите старую ссылку chromedriver с той, которая установлена с brew:
ln -s /usr/local/bin/chromedriver /Users/alex/.webdrivers/chromedriver
- Затем откройте приложение Finder, затем нажмите «Перейти в меню», а затем нажмите
Go to folder ...
«Опция» и введите этот маршрут:/usr/local/Caskroom/chromedriver/
- Там вы должны увидеть папку с установленной вами версией chromedriver, что-то вроде этого:
88.0.4324.96
- Введите эту папку, и вы должны увидеть двоичный файл chromedriver.
- Щелкните по нему правой кнопкой мыши и нажмите
Open
Теперь у вас должно появиться окно терминала с выводом:
Last login: Sun Jan 31 12:29:15 on ttys001 /usr/local/Caskroom/chromedriver/88.0.4324.96/chromedriver ; exit; ~ /usr/local/Caskroom/chromedriver/88.0.4324.96/chromedriver ; exit; Starting ChromeDriver 88.0.4324.96 (68dba2d8a0b149a1d3afac56fa74648032bcf46b- refs/branch-heads/4324@{#1784}) on port 9515 Only local connections are allowed. Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. ChromeDriver was started successfully.
- Наконец, нажмите
Ctrl C
, чтобы остановить выполнение и выйти из окна терминала.
Теперь вы должны иметь возможность запускать тесты capybara.
Комментарии:
1. Это конкретный набор инструкций для обновления Chromedriver в Rails / Capybara framework, который может быть более общим ответом на вопрос «Как мне обновить Chromedriver в Rails / Capybara framework». Спасибо за вклад.
Ответ №4:
npm uninstall protractor amp;amp; npm install protractor
Ответ №5:
Если вы используете webdrivers gem, обновите его:
bundle update webdrivers