diff --git a/pydoll/browser/base.py b/pydoll/browser/base.py index e0677319..fa30b91f 100644 --- a/pydoll/browser/base.py +++ b/pydoll/browser/base.py @@ -234,6 +234,7 @@ async def stop(self): if await self._is_browser_running(): await self._execute_command(BrowserCommands.CLOSE) self._browser_process_manager.stop_process() + await asyncio.sleep(1) # small delay to ensure browser is closed self._temp_directory_manager.cleanup() else: raise exceptions.BrowserNotRunning('Browser is not running') diff --git a/pydoll/browser/managers.py b/pydoll/browser/managers.py index 27377cfb..10b34bb2 100644 --- a/pydoll/browser/managers.py +++ b/pydoll/browser/managers.py @@ -1,5 +1,4 @@ import os -import shutil import subprocess from contextlib import suppress from tempfile import TemporaryDirectory @@ -201,7 +200,7 @@ def __init__(self, temp_dir_factory=TemporaryDirectory): temporary directories. Defaults to TemporaryDirectory. """ self._temp_dir_factory = temp_dir_factory - self._temp_dirs = [] + self._temp_dirs: list[temp_dir_factory] = [] def create_temp_dir(self): """ @@ -213,7 +212,7 @@ def create_temp_dir(self): Returns: TemporaryDirectory: The created temporary directory instance. """ - temp_dir = self._temp_dir_factory() + temp_dir = self._temp_dir_factory(delete=False) # avoid auto-deletion self._temp_dirs.append(temp_dir) return temp_dir @@ -222,15 +221,14 @@ def cleanup(self): Cleans up all temporary directories created by this manager. This method removes all temporary directories created with - create_temp_dir, suppressing any OS errors that might occur - during deletion. + create_temp_dir. Returns: None """ for temp_dir in self._temp_dirs: with suppress(OSError): - shutil.rmtree(temp_dir.name) + temp_dir.cleanup() class BrowserOptionsManager: diff --git a/tests/test_browser_managers.py b/tests/test_browser_managers.py index c14f37e7..1232d9a0 100644 --- a/tests/test_browser_managers.py +++ b/tests/test_browser_managers.py @@ -20,7 +20,10 @@ def proxy_options(): def temp_manager(): mock_dir = MagicMock() mock_dir.name = '/fake/temp/dir' - return TempDirectoryManager(temp_dir_factory=lambda: mock_dir) + mock_dir.cleanup = MagicMock() + return TempDirectoryManager( + temp_dir_factory=lambda **kwargs: mock_dir + ) @pytest.fixture @@ -101,12 +104,10 @@ def test_cleanup_temp_dirs(temp_manager): mock_dir2 = MagicMock() temp_manager._temp_dirs = [mock_dir1, mock_dir2] - with patch('shutil.rmtree') as mock_rmtree: - temp_manager.cleanup() + temp_manager.cleanup() - assert mock_rmtree.call_count == 2 - mock_rmtree.assert_any_call(mock_dir1.name) - mock_rmtree.assert_any_call(mock_dir2.name) + assert mock_dir1.cleanup.call_count == 1 + assert mock_dir2.cleanup.call_count == 1 def test_initialize_options_with_none():