Skip to content

Commit fdd151b

Browse files
committed
fix: add delay after closing browser and improve temp directory cleanup
1 parent ae16ec5 commit fdd151b

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

pydoll/browser/base.py

+1
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ async def stop(self):
234234
if await self._is_browser_running():
235235
await self._execute_command(BrowserCommands.CLOSE)
236236
self._browser_process_manager.stop_process()
237+
await asyncio.sleep(1) # small delay to ensure browser is closed
237238
self._temp_directory_manager.cleanup()
238239
else:
239240
raise exceptions.BrowserNotRunning('Browser is not running')

pydoll/browser/managers.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def __init__(self, temp_dir_factory=TemporaryDirectory):
201201
temporary directories. Defaults to TemporaryDirectory.
202202
"""
203203
self._temp_dir_factory = temp_dir_factory
204-
self._temp_dirs = []
204+
self._temp_dirs: list[temp_dir_factory] = []
205205

206206
def create_temp_dir(self):
207207
"""
@@ -213,7 +213,7 @@ def create_temp_dir(self):
213213
Returns:
214214
TemporaryDirectory: The created temporary directory instance.
215215
"""
216-
temp_dir = self._temp_dir_factory()
216+
temp_dir = self._temp_dir_factory(delete=False) # avoid auto-deletion
217217
self._temp_dirs.append(temp_dir)
218218
return temp_dir
219219

@@ -222,15 +222,14 @@ def cleanup(self):
222222
Cleans up all temporary directories created by this manager.
223223
224224
This method removes all temporary directories created with
225-
create_temp_dir, suppressing any OS errors that might occur
226-
during deletion.
225+
create_temp_dir.
227226
228227
Returns:
229228
None
230229
"""
231230
for temp_dir in self._temp_dirs:
232231
with suppress(OSError):
233-
shutil.rmtree(temp_dir.name)
232+
temp_dir.cleanup()
234233

235234

236235
class BrowserOptionsManager:

tests/test_browser_managers.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ def proxy_options():
2020
def temp_manager():
2121
mock_dir = MagicMock()
2222
mock_dir.name = '/fake/temp/dir'
23-
return TempDirectoryManager(temp_dir_factory=lambda: mock_dir)
23+
mock_dir.cleanup = MagicMock()
24+
return TempDirectoryManager(
25+
temp_dir_factory=lambda delete: mock_dir
26+
)
2427

2528

2629
@pytest.fixture
@@ -101,12 +104,10 @@ def test_cleanup_temp_dirs(temp_manager):
101104
mock_dir2 = MagicMock()
102105
temp_manager._temp_dirs = [mock_dir1, mock_dir2]
103106

104-
with patch('shutil.rmtree') as mock_rmtree:
105-
temp_manager.cleanup()
107+
temp_manager.cleanup()
106108

107-
assert mock_rmtree.call_count == 2
108-
mock_rmtree.assert_any_call(mock_dir1.name)
109-
mock_rmtree.assert_any_call(mock_dir2.name)
109+
assert mock_dir1.cleanup.call_count == 1
110+
assert mock_dir2.cleanup.call_count == 1
110111

111112

112113
def test_initialize_options_with_none():

0 commit comments

Comments
 (0)