在centOS環境搭建airtest時遇到 Xlib.error.DisplayNameError: Bad display name "" 和Xlib.error.XauthError異常


現在的問題

(airtestVenv) [root@67 airtest_selenium]# python3 proxy.py
Traceback (most recent call last):
  File "proxy.py", line 10, in <module>
    from airtest_selenium.utils.airtest_api import loop_find
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/airtest_selenium/__init__.py", line 1, in <module>
    from .proxy import WebChrome, Element
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/airtest_selenium/proxy.py", line 13, in <module>
    from pynput.mouse import Controller, Button
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/pynput/__init__.py", line 40, in <module>
    from . import keyboard
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/pynput/keyboard/__init__.py", line 49, in <module>
    from ._xorg import KeyCode, Key, Controller, Listener
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/pynput/keyboard/_xorg.py", line 39, in <module>
    from pynput._util.xorg import (
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/pynput/_util/xorg.py", line 40, in <module>
    _check()
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/pynput/_util/xorg.py", line 38, in _check
    display = Xlib.display.Display()
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/Xlib/display.py", line 89, in __init__
    self.display = _BaseDisplay(display)
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/Xlib/display.py", line 71, in __init__
    protocol_display.Display.__init__(self, *args, **keys)
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/Xlib/protocol/display.py", line 84, in __init__
    name, protocol, host, displayno, screenno = connect.get_display(display)
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/Xlib/support/connect.py", line 73, in get_display
    return mod.get_display(display)
  File "/root/.virtualenvs/airtestVenv/lib/python3.6/site-packages/Xlib/support/unix_connect.py", line 76, in get_display
    raise error.DisplayNameError(display)
Xlib.error.DisplayNameError: Bad display name ""

 

我以為是我改的proxy.py腳本在centos系統中運行有問題,早上來了直接python3 proxy.py (未修改的腳本)也是報這個錯,說明不是我改的問題,而是環境有問題

無意中在虛擬環境中看到了xlib這個文件夾,反應過來,這是一個包

 

查了一下xlib是干什么的

https://cloud.tencent.com/developer/ask/202120

 

 非常椿的博客!

https://www.cnblogs.com/js1314/p/10373332.html

xhost + 是什么

 

(airtestVenv) [root@67 demoAir.air]# xhost + xhost: unable to open display "" (airtestVenv) [root@67 demoAir.air]# xdpyinfo xdpyinfo: unable to open display "". (airtestVenv) [root@67 demoAir.air]# xhost + xhost: unable to open display "" (airtestVenv) [root@67 demoAir.air]# export DISPLAY=:0 (airtestVenv) [root@67 demoAir.air]# xhost + access control disabled, clients can connect from any host

 

錯誤變了

 把錯誤信息扒下來,發現問題的源在airtest_selenium包下的proxy.py這個文件,圈紅的這一行

既然運行這行代碼會報錯(我有單獨放一個PY文件來驗證想法,只放這一句代碼,在本地跑不錯,在centOS中跑就會出來上圖一模一樣的錯誤 )

那我注銷掉是不是就不會報錯了呢,注銷會有什么影響嗎?先來試試的

 

 oh no 結果是不能在公司的centOS服務器中運行airtest   QAQ

為什么呢(因為公司的centOS服務器沒有操作界面呀 )

因為 在proxy.py文件中有一行這樣的代碼

from pynput.mouse import Controller, Button

這行代碼是用來干什么的呢

不知道哦

那我們先來看看注銷掉這行代碼會有什么效果

注銷掉相關代碼后再運行demoAir.py

運行腳本並生成log文件

wangju@wangju-HP-348-G4:~/Airtest/demoAir.air$ airtest run demoAir.py  --log log/

生成log.html文件

wangju@wangju-HP-348-G4:~/Airtest$ airtest report demoAir.air --log_root demoAir.air/log/ --outfile demoAir.air/log/log.html --

 

lang zh

打開日志文件夾,咦,奇怪,沒有截圖呢

再來看一看 不注釋這行代碼生成的日志文件內容 是啥樣的

 

 再來打開log.html文件看一看

是醬嬸兒的

 

 

 由此我們可以知道 pynput是和屏幕操作相關的,記錄鼠標呀,鍵盤呀這些設備的操作
而如果我們把這樣的代碼注釋掉,腳本是可以跑通的,因為我們可以配置瀏覽器的 --headleses 屬性 使腳本 無界面 運行.

決策點就是,是否需要這份可視化的報告,
需要:給服務器安裝圖形化界面 或 直接放到有圖形化界面的系統中去運行

這也說明了為啥程序在我本地能跑通(ubuntu)
而放到centOS中去跑的時候就會報錯,因為我ubuntu有操作界面啊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM