【问题标题】:Selelum Headless in Ubuntu Server, minor error "The browser seems to have exited before we could connect"Ubuntu Server 中的 Selelum Headless,小错误“浏览器似乎在我们连接之前已经退出”
【发布时间】:2011-12-09 01:22:30
【问题描述】:

所以我在 Ubuntu 服务器虚拟机上运行 Selenium 并且有一个小问题。当我启动我的 VM 并运行 Selenium 测试脚本时,我收到此错误:selenium.common.exceptions.WebDriverException:消息:'浏览器似乎在我们可以连接之前已经退出'。现在,如果我在运行任何 Selenium 测试脚本之前在终端中执行此 export DISPLAY=:99 ,则一切正常。所有测试都运行良好!

我的问题是你们中的任何人都知道如何在启动时执行此命令。因此,在运行 Selenium 测试脚本之前,我不必在终端中运行它。我尝试将其添加到 /etc/rc.local 文件中。但这似乎不起作用。

我也尝试在我的 Selenium 测试脚本的开头执行它。只需添加这个(我正在使用 python)

os.system("export DISPLAY=:99")

关于如何做到这一点有什么建议吗? 提前致谢

【问题讨论】:

  • 为什么不将它包含在脚本中并获取它或将其添加到 ~/.bash_profile
  • 好的,我会尝试将其添加到 ~/.bash_profile。让你知道这是否有效。谢谢

标签: python ubuntu selenium headless


【解决方案1】:

这是行不通的:

os.system("export DISPLAY=:99")

因为system() 会启动一个新的shell,并且shell 会在完成后关闭,这会影响一个非常短暂的进程的环境。 (子进程不能影响其父进程的环境。父进程只能影响子进程的环境,前提是他们在执行子进程之前进行了更改。)

您可以选择几种不同的机制来设置DISPLAY

  • 在启动测试机制的脚本中设置它

    如果系统可能执行其他任务,这尤其好,因为这将影响尽可能小。在 Python 中,这看起来像:

    os.environ["DISPLAY"]=":99"
    

    bash(1) 中,看起来像:

    export DISPLAY=:99
    
  • 在运行测试的用户帐户的登录脚本中设置它。

    如果运行测试的用户帐户永远不需要DISPLAY 变量,那就太好了。 (虽然如果用户通过ssh -X testinguser@machine ... 登录,这将破坏通常的ssh(1) X 会话转发。)

    将此添加到您用户的~/.bashrc~/.profile~/.bash_profile。 (有关文件之间的差异,请参阅bash(1)。)

    export DISPLAY=:99
    
  • 在所有用户登录时设置它。如果系统上的多个用户帐户将运行测试脚本并且您只希望它适用于所有这些脚本,这很好。您不关心用户是否拥有用于 X 转发的 DISPLAY

    编辑/etc/environment 以添加新变量。 pam_env(8) PAM 模块将为在/etc/pam.d/ 配置目录中配置为使用pam_env(8) 的任何服务下进行身份验证的所有用户帐户设置环境变量。 (这听起来比实际更复杂——有些服务希望经过身份验证的用户设置环境变量,而有些服务则不需要。)

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 2014-11-22
    • 2015-01-31
    • 2013-09-20
    • 2016-10-16
    • 2019-02-18
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多