1

所以我在 Ubuntu Server VM 上运行 Selenium 并且有一个小问题。当我启动我的虚拟机并运行 Selenium 测试脚本时,我收到了这个错误:selenium.common.exceptions.WebDriverException: Message: 'The browser似乎 has exited before we could connect'。现在,如果我在运行任何 Selenium 测试脚本之前在终端中执行此export DISPLAY=:99 ,则一切正常。所有测试都运行得很好!

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

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

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

关于如何做到这一点的任何建议?提前致谢

4

1 回答 1

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 会话转发。)

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

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

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

于 2011-12-09T01:47:46.880 回答