无法远程运行针对Safari 11的测试(ssh、CI)

无法远程运行针对Safari 11的测试(ssh、CI),ssh,rspec,safari,safaridriver,Ssh,Rspec,Safari,Safaridriver,当我试图手动通过ssh或Jenkins(Safari所在的机器是远程从机)运行测试时,我在对Safari 11运行Ruby/RSpec测试时遇到了问题 执行测试时,我遇到以下错误: Selenium::WebDriver::Error::WebDriverError: unable to connect to safaridriver 127.0.0.1:7050 奇怪的是,当我直接登录到Mac电脑时,我能够运行测试。这让我得出这样的结论:可能存在一些权限,默认情况下,这些权限会禁用ss

当我试图手动通过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,而不是总是尝试在不同的端口上生成新的驱动程序。如果您对此有任何想法,我们将不胜感激

这是我的环境: 操作系统:MacOS Sierra 10.12.6 浏览器:Safari 11.0.2


提前感谢

有一种可能的解决方法可以做到这一点。首先,您需要创建一个启动SafariDriver的Automator工作流或Apple脚本

然后将其另存为应用程序。假设我们将其命名为SafariDriver7050

然后从SSH会话开始,您需要执行

open /Applications/SafariDriver7050.app
这将在登录会话中实际启动SafariDriver,它应该适合您

警告是关闭它,您需要先关闭
SafariDriver7050
应用程序,然后需要关闭
safaridriver
进程。订单很重要,否则会在UI上创建一个错误对话框

编辑-1:

正如您所建议的,当您将测试包装为一个应用程序,然后它将能够自动启动SafariDriver而不会出现任何问题时,这样做会更容易。问题的关键是在SSH会话中使用
open
命令

编辑-2

为什么SafariDriver不能在SSH中工作?好吧,如果你看看linux的对应版本

对于linux,我们可以使用DISPLAY环境变量在现有显示器中启动应用程序,也可以使用XVFB之类的东西在虚拟显示器中启动浏览器。这是大多数框架在linux机器中使用的概念

但是Mac没有这种功能,这就是为什么需要这种变通方法的原因。现在我不确定为什么它没有这个。可能还有一些我可能不知道的其他解决方法,因此任何有价值信息的人都可以帮助改进我的案例答案的这一部分:

  • OSX主机端的Automator应用程序如上所述创建,并稍作修改:
  • 在CCI/Jenkins方面:
  • 在Python中:
  • def safaridriver():
    返回webdriver.Safari(所需的功能=Caps.Safari,端口=7050)
    
    谢谢。你给了我很好的方向。最后,我创建了*.app,它实际上运行我的测试,所以我甚至不需要单独启动safaridriver。更好的是,最后用sameAt更新了答案。你知道不允许直接从ssh运行safaridriver的原因是什么吗?我在chromedriver和geckodriver(firefox)上没有遇到同样的问题。另外,您能否描述一下,当shell脚本打包到.app中时,与OS透视图的实际区别是什么?我认为这将是一个伟大的补充这个答案,你wrote@BakirJusufbegovic”我补充道
    security unlock-keychain -p your_host_password /Users/$USER/Library/Keychains/login.keychain-db
    safaridriver --enable
    safaridriver -p 7050
    
    open /Applications/StartSafariDriver7050.app/
    run pytest cmd
    osascript -e 'quit app "StartSafariDriver7050"'
    pkill safaridriver