Protractor测试无法在Firefox启动,求助解决E2E测试报错
先把你遇到的报错信息贴出来,方便定位问题:
[webdriver-start] 不支持在普通用户会话中以root身份运行Firefox。($HOME 为 /Users/x,归用户x所有)
[protractor ] [19:38:09] E/launcher - invalid argument: can't kill an exited process
[protractor ] 构建信息:版本: '3.141.59', 修订版本: 'e82be7d358', 时间: '2018-11-14T08:25:53'
[protractor ] 系统信息:主机: 'MacBook-Pro.local', IP: '192.168.1.3', 系统名称: 'Mac OS X', 系统架构: 'x86_64', 系统版本: '10.13.6', Java版本: '1.8.0_151'
[protractor ] 驱动信息:driver.version: unknown
从报错来看,核心问题是你在尝试以root身份在普通用户的会话中启动Firefox,这是Firefox明确禁止的操作;后面的“无法杀死已退出进程”的错误,是因为Firefox根本没启动起来,Protractor去终止一个不存在的进程才触发的。
下面给你几个可行的解决办法:
1. 切换到普通用户身份运行测试
这是最直接也最推荐的方案,毕竟Firefox不允许root在普通用户会话运行是出于安全考虑。
- 如果你当前是root用户,执行
su x切换到归属/Users/x的用户x,然后进入你的测试项目目录,重新运行protractor your-config-file.js。 - 如果你之前是用
sudo命令启动的测试,直接去掉sudo,用普通用户权限执行测试命令就行。
2. 强制允许root运行Firefox(不推荐,仅特殊场景用)
如果因为某种特殊需求必须以root身份运行,你可以在Protractor的配置文件里添加Firefox的启动参数,绕过这个限制:
打开你的Protractor配置文件(比如conf.js),修改capabilities部分:
capabilities: { 'browserName': 'firefox', 'moz:firefoxOptions': { args: ['-no-remote', '-allow-root'] } }
保存配置后,再重新启动测试。注意:这个做法会降低安全性,非必要不建议使用。
3. 清理残留的WebDriver/Firefox进程
有时候之前的测试进程没有正常退出,也会引发这类进程相关的错误。你可以手动清理这些残留进程:
在Mac终端执行以下命令:
pkill firefox pkill geckodriver
清理完成后,再尝试运行测试。
额外提示:检查版本兼容性
你的Selenium版本是3.141.59,要确保你安装的geckodriver版本和Firefox版本是兼容的。版本不匹配也可能导致Firefox启动失败,你可以查看geckodriver的版本说明,下载对应版本替换现有文件。
内容的提问来源于stack exchange,提问作者Lakmal Rajith

