在做自动化测试时,你肯定遇到过这个烦心事 - 服务器上跑Selenium时总是报“需要显示器”的错。这不能忍啊!要是能给服务器装个“虚拟显示器”就好了。还真有这么个东西 - PyVirtualDisplay ,它就是专门解决这类问题的救星。
说白了就是在内存里模拟一个显示器,你运行的程序都以为自己连着真显示器,其实是在跟这个虚拟的“纸片人显示器”打交道。
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Chrome()
driver.get('http://www.python.org')
print(driver.title)
driver.quit()
display.stop()
创建个虚拟显示器就跟变魔术一样简单,三板斧就搞定:
创建Display对象
启动它
用完记得关掉
温馨提示:别忘了安装Xvfb,不然PyVirtualDisplay就傻眼了:
# Ubuntu/Debian
apt-get install xvfb
# CentOS/RHEL
yum install xorg-x11-server-Xvfb
平时测试想看看浏览器到底在干啥,把visible=0
改成visible=1
就行。不过要记住,服务器上想看到界面还得装个X Window。
# 这回能看到浏览器窗口啦
display = Display(visible=1, size=(1024, 768))
有时候一个显示器不够用?整多个呗:
display1 = Display(visible=0, size=(800, 600))
display2 = Display(visible=0, size=(1024, 768))
display1.start()
# 干点事
display1.stop()
display2.start()
# 再干点事
display2.stop()
还能设置不同的后端,比如用Xvfb或者Xephyr:
display = Display(backend='xvfb', size=(800, 600))
# 或者
display = Display(backend='xephyr', size=(800, 600))
烦死了每次都要手动stop?用with语句啊:
with Display(visible=0, size=(800, 600)):
driver = webdriver.Chrome()
driver.get('http://www.python.org')
driver.quit()
# 出了with块自动停止display
玩PyVirtualDisplay也有几个坑得提醒下:
通过PyVirtualDisplay,你就能在无头环境下玩转各种需要GUI的自动化测试了。它就像给你的程序装了个隐形眼镜,明明啥都没有,却能看得一清二楚。这代码一跑,测试不再受显示器的气!
代码和环境都配好了,赶紧试试给你的自动化测试加个“显示器”吧!好玩又实用,测试环境再也不用愁了。