• 在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有操作界面啊

  • 相关阅读:
    关于websocket
    Convert word or html to wiki syntax
    How to center an image?
    Multiline strings in JavaScript
    JavaScript tips and tricks 4
    Use IE userdata behavior as a clientside data storage
    Confused with JavaScript prototype
    Javascript中的作用域(scope)
    JavaScript tips and tricks 2
    AOP in JavaScript
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11010451.html
Copyright © 2020-2023  润新知