在x虚拟帧缓冲区(xvfb)内运行无头显示

xvfbwrapper的Python项目详细描述


manage headless displays with xvfb(x虚拟帧缓冲区)

https://travis-ci.org/cgoldberg/xvfbwrapper.svg?branch=master

信息:


关于xvfbwrapper:

xvfb wrapper是一个用于控制xvfb的python包装器。


关于xvfb:

xvfb(x虚拟帧缓冲区)是一个实现x11显示服务器协议的显示服务器。它在内存中运行,不需要物理显示。只需要一个网络层。

xvfb对于在无头服务器上运行验收测试特别有用。


从pypi安装xvfbwrapper:

^{tt1}$

系统要求:

  • xvfb(sudo apt-get install xvfb,或类似的)
  • python 2.7或3.3+

示例

基本用法:

from xvfbwrapper import Xvfb

vdisplay = Xvfb()
vdisplay.start()

# launch stuff inside
# virtual display here.

vdisplay.stop()

基本用法,指定显示几何体:

from xvfbwrapper import Xvfb

vdisplay = Xvfb(width=1280, height=740, colordepth=16)
vdisplay.start()

# launch stuff inside
# virtual display here.

vdisplay.stop()

用作上下文管理器:

from xvfbwrapper import Xvfb

with Xvfb() as xvfb:
    # launch stuff inside virtual display here.
    # It starts/stops around this code block.

测试示例:无头Selenium Webdriver测试:

import unittest

from selenium import webdriver
from xvfbwrapper import Xvfb


class TestPages(unittest.TestCase):

    def setUp(self):
        self.xvfb = Xvfb(width=1280, height=720)
        self.addCleanup(self.xvfb.stop)
        self.xvfb.start()
        self.browser = webdriver.Firefox()
        self.addCleanup(self.browser.quit)

    def testUbuntuHomepage(self):
        self.browser.get('http://www.ubuntu.com')
        self.assertIn('Ubuntu', self.browser.title)

    def testGoogleHomepage(self):
        self.browser.get('http://www.google.com')
        self.assertIn('Google', self.browser.title)


if __name__ == '__main__':
    unittest.main()

上面的测试类使用seleniumxvfbwrapper在无头显示中运行firefox的每个测试用例。

  • 启动虚拟显示
  • Firefox在虚拟显示器内部启动(无头)
  • 运行测试时不显示浏览器
  • 在每个测试用例中都断言条件
  • 清理期间浏览器退出
  • 清理期间虚拟显示停止

look ma',没有浏览器!

(您也可以在虚拟显示器内截图,以诊断测试失败)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
jsf-java。安全NoSuchAlgorithmException:在jboss上部署时AES密钥生成器不可用   使用servlet与持久化java应用程序对话   java SPNEGO获取用户详细信息   如何向数组中的每个元素添加特定的数字?JAVA   佛教日历中的java JSpinner日期编辑器   tomcat6如何使用ip地址从另一台机器运行java动态web项目   向数据模型添加行时发生java ArrayIndexOutOfBoundsException   java奇怪的线程行为   java为什么程序没有显示任何输出?   具有弱值的java HashMap   java可以收集数据。不可修改地图是否保留原始地图?   java如何确定应用程序中的gccpu利用率?   带文本文件和比较索引的java摩尔斯电码   java第二个按钮没有响应   Maven LifecycleExecutionException java。util。ConcurrentModificationException帮助读取此堆栈跟踪/调试   java试图实现持有密钥绑定   运行时如何在Java程序中检索环境变量(外部修改)的修改值?   java可以在Gsheets数据验证下拉菜单中使用IF函数吗   java应该是抽象还是实现的一部分?