【问题标题】:Python: Making PhantomJS browser shut down if test terminatedPython:如果测试终止,使 PhantomJS 浏览器关闭
【发布时间】:2014-10-24 10:23:55
【问题描述】:

我正在开发一个 Django 应用程序。我正在使用 Selenium 和 PhantomJS 进行测试。

我今天发现,每次我终止测试(我在调试时经常这样做)时,PhantomJS 进程仍然存在。这意味着在调试会话之后,我可能会留下 200 个僵尸 PhantomJS 进程!

当我终止 Python 调试进程时,如何让这些 PhantomJS 进程终止?如果有时间延迟,那也有效。 (即如果 2 分钟不使用,让它们终止,这将解决我的问题。)

【问题讨论】:

    标签: python django selenium phantomjs


    【解决方案1】:

    通常的设置是在类的 teardown 方法中退出 PhantomJS 浏览器。例如:

    from django.conf import settings
    from django.test import LiveServerTestCase
    from selenium.webdriver.phantomjs.webdriver import WebDriver
    
    
    PHANTOMJS = (settings.BASE_DIR +
                 '/node_modules/phantomjs/bin/phantomjs')
    
    
    class PhantomJSTestCase(LiveServerTestCase):
        @classmethod
        def setUpClass(cls):
            cls.web = WebDriver(PHANTOMJS)
            cls.web.set_window_size(1280, 1024)
            super(PhantomJSTestCase, cls).setUpClass()
    
        @classmethod
        def tearDownClass(cls):
            screenshot_file = getattr(settings, 'E2E_SCREENSHOT_FILE', None)
            if screenshot_file:
                cls.web.get_screenshot_as_file(screenshot_file)
            cls.web.quit()
            super(PhantomJSTestCase, cls).tearDownClass()
    

    如果您不使用unittest 测试用例,则必须自己使用quit 方法。当 Python 进程终止时,您可以使用atexit 模块运行代码,例如:

    import atexit
    
    web = WebDriver(PHANTOMJS)
    atexit.register(web.quit)
    

    【讨论】:

    • 没有帮助,我通常会终止调试过程以节省时间。我可以停止这样做,但我真的很喜欢它,所以如果有针对这种情况的解决方案,我会喜欢的。 (当我在代码中进行修复时,终止会更好,因为继续运行旧版本的代码没有意义。)
    • 这两个选项都应该在那里工作。如何终止python进程?
    • 我的调试器有一个终止进程的快捷方式(Ctrl-F5,没关系。)它只是立即停止进程。在这些情况下,据我所知,任何tearDown 方法或atexit 处理程序都不会被调用。
    • 你能试试吗?如果atexit 根本没有被调用,我会感到惊讶。如果它确实被规避了,那么你可以从 Python 中做很多事情,因为 Python 甚至没有关于它被终止时要做什么的发言权。那么你最好的选择是查看你的 IDE 并教它优雅地终止 Python,或者终止 phantomjs 进程本身。
    • 您使用的是哪个 IDE(或测试运行器/调试器)?
    猜你喜欢
    • 2012-08-22
    • 2015-04-23
    • 1970-01-01
    • 2023-03-25
    • 2011-02-20
    • 2010-10-19
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多