当我尝试通过 ssh 手动或通过 Jenkins(其中 Safari 所在的机器是远程从机)运行测试时,我在针对 Safari 11 运行 Ruby/RSpec 测试时遇到问题。
执行测试时,我收到以下错误:
Selenium::WebDriver::Error::WebDriverError:
unable to connect to safaridriver 127.0.0.1:7050
奇怪的是,当我直接登录到 Mac 机器时,我能够运行测试。这使我得出的结论是,默认情况下可能有一些权限禁用 ssh 会话的执行,但不确定为什么?
另外,据我所知,Safari 驱动程序是 Safari 10+ 的一部分,因此不再作为扩展安装
更新:我发现当我通过 ssh 登录时,由于某种原因无法生成应由测试生成的 safaridriver 可执行文件。
例子:
/usr/bin/safaridriver -p 7050
它只会以非零退出代码终止,而直接在机器上运行相同的命令将在前台运行 safaridriver。由于我希望 Jenkins 在这台机器上运行测试作业,因此我解决这个问题的想法是在这台机器上启动 safaridriver(通过 cron 或 launchctl),然后使用此实例通过我的测试连接到它。然而,到目前为止,我无法让我的测试(Selenium/Capybara)重新使用现有的 safaridriver,而不是总是尝试在不同的端口上生成新的 safaridriver。对此的任何想法也将不胜感激。
这是我的环境:
操作系统:MacOS Sierra 10.12.6
浏览器:Safari 11.0.2
提前致谢
有一个可能的解决方法可以做到这一点。首先,您需要创建启动 SafariDriver 的 Automator 工作流程或 Apple 脚本
然后将其另存为应用程序。假设我们命名它SafariDriver7050
.
然后从 SSH 会话中您需要执行
open /Applications/SafariDriver7050.app
这实际上会在登录会话中启动 SafariDriver,它应该适合您。
需要注意的是,关闭它时,您需要先杀死SafariDriver7050
应用程序,然后你需要杀死safaridriver
过程。顺序很重要,否则会在 UI 上创建错误对话框
Edit-1:
正如您所建议的,当您将测试包装为应用程序时,这样做会更容易,然后它将自动能够启动 SafariDriver 而不会出现任何问题。问题的关键是使用open
SSH 会话中的命令
Edit-2
为什么 SafariDriver 无法在 SSH 中工作?好吧,如果你看看 linux 的对应版本
对于 Linux,我们可以使用 DISPLAY 环境变量在现有显示器中启动应用程序,或者我们可以使用 XVFB 之类的东西在虚拟显示器中启动浏览器。这是大多数框架在 Linux 机器上使用的概念。
但 Mac 没有这样的功能,这就是为什么需要这种解决方法。现在为什么没有这个,我不确定。可能还有一些我可能不知道的其他解决方法,因此任何拥有有价值信息的人都可以帮助改进这部分答案
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)