【问题标题】:Automatically close xvfb after Selenium test using pyvirtualdisplaySelenium 测试后使用 pyvirtualdisplay 自动关闭 xvfb
【发布时间】:2018-09-12 05:39:18
【问题描述】:

我在 Firefox 中通过 pyvirtualdisplay 无头运行 Selenium 测试,之前遇到了意外错误 (connection refused) 以及 75 到 80 秒之间的极长响应时间。经过一些实验,原来我之前的功能测试已经让三个 Xvfb 实例运行,在手动杀死这些实例后,我的下一个测试仅在 5.7 秒内就达到了预期的失败。所以,问题解决了,但ps 表明这个测试也留下了一个 Xvfb 进程。现在,根据文档,stop() 方法似乎是最好的选择,但在我的代码中包含它似乎没有任何效果。这是有问题的测试:

from selenium import webdriver
from pyvirtualdisplay import Display
import unittest

display = Display(visible=0, size=(800,600))
display.start()

class NewVisitorTest(unittest.TestCase):
    def setUp(self):
        self.browser = webdriver.Firefox()

    def tearDown(self):
        self.browser.quit()

    def test_start_retrievable_list(self):
        self.browser.get('http://localhost:8000')    
        self.assertIn('To-Do', self.browser.title)
        self.fail('Finish the test!')

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

display.stop()

如何更改脚本以关闭 Xvfb 实例,而无需获取 PID 并手动将其关闭?

【问题讨论】:

    标签: python selenium testing xvfb


    【解决方案1】:

    只需将显示的开始和停止移动到您的测试用例函数中:

    from selenium import webdriver
    from pyvirtualdisplay import Display
    import unittest
    
    
    class NewVisitorTest(unittest.TestCase):
        def setUp(self):
            self.display = Display(visible=0, size=(800,600))
            self.display.start()
            self.browser = webdriver.Firefox()
    
        def tearDown(self):
            self.browser.quit()
            self.display.stop()
    
        def test_start_retrievable_list(self):
            self.browser.get('http://localhost:8000')    
            self.assertIn('To-Do', self.browser.title)
            self.fail('Finish the test!')
    
    if __name__ == '__main__':
        unittest.main(warnings='ignore')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 2018-03-30
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      相关资源
      最近更新 更多