метод quit в python unittests вызывает ConnectionResetError с помощью Selenium - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть класс для Integration Test, использующий Selenium для Chrome Webdriver, подобный этому

LoginTest.py
class LoginTest(StaticLiveServerTestCase):
    browser = CommonTest.set_up_webdriver()
    wait = WebDriverWait(browser, 20)

    @classmethod
    def setUpClass(cls):
        super(LoginTest, cls).setUpClass()
        cls.browser.maximize_window()
        cls.browser_url = cls.live_server_url
        cls.browser.get(cls.browser_url)

    @classmethod
    def tearDownClass(cls):
        super(LoginTest, cls).tearDownClass()
        time.sleep(3)
        cls.browser.quit() # Error here

    def setUp(self):
        super(LoginTest, self).setUp()
        ...

    def tearDown(self):
        super(LoginTest, self).tearDown()
CommonTest.py
class CommonTest:
    @staticmethod
    def set_up_webdriver():
        options = webdriver.chrome.options.Options()
        options.add_argument("--disable-dev-shm-usage")
        options.add_argument("--no-sandbox")

        return webdriver.Chrome(executable_path=Environment.CHROME_DRIVER_WINDOWS_PATH, options=options,
                                    service_log_path=ConstTest.TEST_LOG_PATH)

Когда я удаляю строку cls.browser.quit(), мой Тест работает нормально. Но он не закрывает Chrome Браузер. Если я добавлю строку cls.browser.quit() Будет выдано сообщение об ошибке:

ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

У меня будет поиск ошибки ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host много раз, и я добавлю много решений, но эта ошибка все еще есть

1 Ответ

1 голос
/ 13 февраля 2020

При использовании в соответствии с текущей реализацией служба будет остановлена, как только ваш скрипт завершится, subprocess.Popen не отправит сигнал на __del__ поэтому попытка закрыть запущенный процесс при запуске __del__.

def __del__(self):
    # `subprocess.Popen` doesn't send signal on `__del__`;
    # so we attempt to close the launched process when `__del__`
    # is triggered.
    try:
        self.stop()
    except Exception:
        pass
...