Найти - Пользователи
Полная версия: Как правильно закрывать браузер открытый в классе синглтоне с помощью вебдрайвера webdrive.Chrome?
Начало » Python для новичков » Как правильно закрывать браузер открытый в классе синглтоне с помощью вебдрайвера webdrive.Chrome?
1
sys_dev
Как правильно закрыть браузер открытый объектом класса webdriver.Chrome из библиотеки selenium при использовании синглтона в модуле?

Вот синглтоны(из темы: http://python.su/forum/topic/31847/):

1. Вариант : @WoMax
 #!/usr/bin/env python
from selenium import webdriver
def singleton(cls):
    instances = {}
    def getinstance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return getinstance
@singleton
class Firefox(webdriver.Firefox):
    pass
if __name__ == '__main__':
    Firefox().get('https://www.ya.ru')
    Firefox().get('https://www.google.com')

2. Вариант моего друга
 from selenium import webdriver
class Chrome(webdriver.Chrome):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super().__new__(cls, *args, **kwargs)
            super().__init__(cls._instance, *args, **kwargs)
        return cls._instance
    def __init__(self, *args, **kwargs):
        pass

Синглтон написан в python-модуле и в нем же используется в методах из 3 классов расположенных в этом же модуле. Браузер открытых объектом webdriver.Chrome закрывается методом quit() этого класса. И при уничтожении объекта этого класса браузер автоматически не закрывается! Это нужно делать явно.

Как это сделать лучше всего? Мне видятся такие варианты:

1. Написать реализацию метода __del__() для синглтон класса
2. Написать функцию и повесить ее в atexit() . А в этой функции вызывать Chrome().quit()
WoMax
sys_dev
Написать реализацию метода __del__() для синглтон класса
это 3 строчки кода, Карл…
sys_dev
WoMax
это 3 строчки кода, Карл…
То есть это и есть верный способ и другой тут будет не python-way ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB