【问题标题】:Display variable error pyautogui显示变量错误pyautogui
【发布时间】:2018-12-11 03:16:41
【问题描述】:

我正在使用 pyautogui 和 pytest 自动测试 GUI 应用程序(python pyqt、pyside)。当我从命令行运行时,我的测试运行没有错误,但在我通过 jenkins 运行时导入 pyautogui 时出现以下错误:

tests/test_enlighten.py:1: in <module>
import re, sys, signal, logging, argparse, pyautogui, subprocess
/usr/lib/python2.7/site-packages/pyautogui/__init__.py:115: in <module>
from . import _pyautogui_x11 as platformModule
/usr/lib/python2.7/site-packages/pyautogui/_pyautogui_x11.py:160: in 
<module>
_display = Display(os.environ['DISPLAY'])
/usr/lib64/python2.7/UserDict.py:23: in __getitem__
raise KeyError(key)
E   KeyError: 'DISPLAY'

我阅读了有关设置 DISPLAY 变量的信息并尝试了这个

new_env = dict(os.environ)
new_env['DISPLAY'] = '0.0'

我尝试了 'localhost:0' 值,但仍然失败。

E   DisplayConnectionError: Can't connect to display "localhost:0": [Errno 111] Connection refused

任何直接帮助或推荐阅读将不胜感激。

【问题讨论】:

  • 这是因为当您在本地运行测试时,您可以在绘制 SuT 的位置显示。 Jenkins 以无头模式运行,没有要绘制的显示。在运行 Jenkins 的 Linux 机器上安装 xvfb 并通过 xvfb-run pytest 而不是 pytest 运行测试。这将使用将呈现 UI 的虚拟显示器运行测试。

标签: python jenkins environment-variables pytest pyautogui


【解决方案1】:

我找到了解决这个特殊问题的方法,它对我来说非常有效。 [这仅适用于linux用户]

打开终端并执行以下命令:

xhost +SI:localuser:root

就是这样。

感谢 mooze@github.com。我从那里得到了这个解决方案。

链接:https://github.com/mooz/xkeysnail/commit/9f3a79ab77eea6c581414bbbcc3b90db5eff5c26

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。但是只有当我使用 sudo 时才会出现问题。这意味着问题只有在我以超级用户身份运行 python 脚本时才存在,因此我在使用 pyautogui 时尝试避免成为超级用户,问题就消失了。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2017-01-25
      • 2016-12-21
      • 2018-08-01
      • 1970-01-01
      相关资源
      最近更新 更多