eme*_*ery 15 macos selenium webdriver selenium-chromedriver apple-silicon
2021年1月6日下午突然,我在OSX下的Selenium Protractor测试停止工作,出现神秘错误
spawn Unknown system error -86
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,发现错误号 86 与
Bad CPU type in executable
Run Code Online (Sandbox Code Playgroud)
并运行以下命令将我的 chromedriver 二进制文件的 CPU 架构与我的系统进行比较:
% 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
Run Code Online (Sandbox Code Playgroud)
如何修复 Selenium 使用的 chromedriver 二进制文件,以便它可以在我的 Intel x64 mac 上运行并清除“系统错误 -86”或“CPU 类型错误”消息?
小智 15
该问题在https://github.com/angular/webdriver-manager/issues/476 中有描述。这现已在 12.1.8 中修复,因此只需更新到该 webdriver 管理器即可。
对于大多数用户来说,这可以通过
npm uninstall protractor && npm install protractor
Run Code Online (Sandbox Code Playgroud)
eme*_*ery 11
编辑:既然 webdriver-manager 中的底层错误已经被修复,这个答案应该被视为已弃用。更好的解决方案是升级到最新版本的 webdriver-manager。如果人们需要使用仍然存在错误的旧版本 webdriver-manager,下面的答案可能会很有用。
根据上面 Deepak Srinivasan 的评论,此错误是由https://github.com/angular/webdriver-manager/issues/476引起的
根本原因: ChromeDriver 团队在其 Apple Silicon ARM 版本的 Chromedriver 的文件名末尾添加了“_m1”——但是 Silicon 和 Intel 版本的 chromedriver 的文件名中都包含“mac64”,并且版本号正是相同的。这导致 webdriver-manager 始终下载 Chromedriver 的 Silicon 版本,即使在 Intel macs 上也是如此。 作为通用解决方案,如果您使用的是 Intel mac,请避免使用文件名中包含 _m1 的 chromedriver。
解决方案 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
Chromedriver 86:https ://chromedriver.storage.googleapis.com/index.html ? path = 86.0.4240.22 /
% webdriver-manager update --versions.chrome=86.0.4240.22
Run Code Online (Sandbox Code Playgroud)
解决方案 2:修改 webdriver-manager npm 包以指向正确的 chromedriver(感谢来自angular github 问题页面的ciekaway对此修复程序)
修改以下文件
node_modules/webdriver-manager/built/lib/files/file_manager.js
Run Code Online (Sandbox Code Playgroud)
或者,如果使用量角器
node_modules/protractor/node_modules/webdriver-manager/built/lib/files/file_manager.js
Run Code Online (Sandbox Code Playgroud)
在第 166 行附近的 downloadFile 方法顶部附近,添加以下行以从文件名中删除“_m1”:
fileUrl.url = fileUrl.url.replace(/_m1/, '');
Run Code Online (Sandbox Code Playgroud)
它需要在以 .then 开头的块的开头之后
binary.getUrl(binary.version()).then(fileUrl => {
Run Code Online (Sandbox Code Playgroud)
它也需要在下一次引用 fileUrl 之前。
例如:
binary.getUrl(binary.version()).then(fileUrl => {
binary.versionCustom = fileUrl.version;
fileUrl.url = fileUrl.url.replace(/_m1/, '');
let filePath = path.resolve(outputDir, binary.filename());
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案是暂时的。它将被 npm 安装覆盖。Chromedriver 和/或 webdriver-manager 团队可能会解决这个问题,此时您应该清除 webdriver-manager 的修改版本并从 npm 下载修复程序。
就我而言,我正在使用 Rails 和 Capybara 进行功能测试。对我有用的是
\n首先,找到实际运行的chromedriver位置:
\nwhich chromedriver\n\n# Which returned:\n\n/Users/alex/.webdrivers/chromedriver\nRun Code Online (Sandbox Code Playgroud)\n然后,通过 Homebrew安装chromedriver :
\nbrew install chromedriver\nRun Code Online (Sandbox Code Playgroud)\n然后,使用以下命令删除在先前位置找到的旧chromedriver引用:
\nrm /Users/alex/.webdrivers/chromedriver\nRun Code Online (Sandbox Code Playgroud)\n现在,将旧的chromedriver参考链接到用 brew 安装的参考:
\nln -s /usr/local/bin/chromedriver /Users/alex/.webdrivers/chromedriver\nRun Code Online (Sandbox Code Playgroud)\n然后,打开Finder应用程序,然后单击“前往”菜单,然后单击Go to folder ...“选项”,然后输入此路线:
/usr/local/Caskroom/chromedriver/\nRun Code Online (Sandbox Code Playgroud)\n在那里你应该看到一个包含你已安装的chromedriver版本的文件夹,如下所示:
\n88.0.4324.96\nRun Code Online (Sandbox Code Playgroud)\n输入该文件夹,您应该会看到chromedriver二进制文件。
\n右键单击它,然后单击Open
现在,您应该会弹出一个终端窗口,其中包含输出:
\nLast login: Sun Jan 31 12:29:15 on ttys001\n/usr/local/Caskroom/chromedriver/88.0.4324.96/chromedriver ; exit;\n \xef\xa3\xbf \xee\x82\xb0 ~ \xee\x82\xb0 /usr/local/Caskroom/chromedriver/88.0.4324.96/chromedriver ; exit;\nStarting ChromeDriver 88.0.4324.96 (68dba2d8a0b149a1d3afac56fa74648032bcf46b- refs/branch-heads/4324@{#1784}) on port 9515\nOnly local connections are allowed.\nPlease see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.\nChromeDriver was started successfully.\nRun Code Online (Sandbox Code Playgroud)\n最后,按Ctrl+C停止执行并退出终端窗口。
现在,您应该能够运行水豚测试。
\n| 归档时间: |
|
| 查看次数: |
7591 次 |
| 最近记录: |