現在的問題
(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有操作界面啊