- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我在 Ubuntu Server VM 上运行 Selenium 时遇到了一个小问题。当我启动我的 VM 并运行 Selenium 测试脚本时,我收到此错误:selenium.common.exceptions.WebDriverException: Message: 'The browser seems to have exited before we could connect'。现在,如果我在运行任何 Selenium 测试脚本之前在终端中执行此 export DISPLAY=:99 一切正常。所有测试都 headless (headless)地运行得很好!
我的问题是你们中有人知道如何在启动时执行这个命令吗?因此,在运行我的 Selenium 测试脚本之前,我不必在终端中运行它。我试过将它添加到 /etc/rc.local 文件中。但这似乎不起作用。
我还尝试在我的 Selenium 测试脚本的开头执行它。通过添加这个(我正在使用 python)
os.system("export DISPLAY=:99")
关于如何实现这一点有什么建议吗?提前致谢
最佳答案
这是行不通的:
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 session 转发。)
将此添加到用户的 ~/.bashrc
或 ~/.profile
或 ~/.bash_profile
。 (有关文件之间的差异,请参阅 bash(1)
。)
export DISPLAY=:99
在所有用户登录时设置它。如果系统上的多个用户帐户将运行测试脚本并且您只希望它对所有用户帐户都起作用,那么这很好。您不关心用户曾经拥有用于 X 转发的 DISPLAY
。
编辑/etc/environment
添加新变量。 pam_env(8)
PAM 模块将为在 /etc 中配置为使用
配置目录。 (这听起来比实际情况更复杂——有些服务希望经过身份验证的用户设置环境变量,有些服务则不需要。)pam_env(8)
的任何服务下进行身份验证的所有用户帐户设置环境变量/pam.d/
关于python - Ubuntu Server 中的 Selelum Headless,小错误 "The browser seems to have exited before we could connect",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439985/
所以我在 Ubuntu Server VM 上运行 Selenium 时遇到了一个小问题。当我启动我的 VM 并运行 Selenium 测试脚本时,我收到此错误:selenium.common.exc
我是一名优秀的程序员,十分优秀!