|
13 | 13 | import pytest
|
14 | 14 | from playwright.async_api import async_playwright
|
15 | 15 | from scrapy import Request, Spider
|
| 16 | +from scrapy.http import Response |
16 | 17 |
|
17 | 18 | from tests import allow_windows, make_handler, assert_correct_response
|
18 | 19 | from tests.mockserver import StaticMockServer
|
@@ -128,3 +129,47 @@ async def test_connect(self):
|
128 | 129 | logging.WARNING,
|
129 | 130 | "Connecting to remote browser, ignoring PLAYWRIGHT_LAUNCH_OPTIONS",
|
130 | 131 | ) in self._caplog.record_tuples
|
| 132 | + |
| 133 | + |
| 134 | +class TestBrowserReconnect(IsolatedAsyncioTestCase): |
| 135 | + @pytest.fixture(autouse=True) |
| 136 | + def inject_fixtures(self, caplog): |
| 137 | + caplog.set_level(logging.DEBUG) |
| 138 | + self._caplog = caplog |
| 139 | + |
| 140 | + @allow_windows |
| 141 | + async def test_restart_browser(self): |
| 142 | + spider = Spider("foo") |
| 143 | + async with make_handler() as handler: |
| 144 | + with StaticMockServer() as server: |
| 145 | + req1 = Request( |
| 146 | + server.urljoin("/index.html"), |
| 147 | + meta={"playwright": True, "playwright_include_page": True}, |
| 148 | + ) |
| 149 | + resp1 = await handler._download_request(req1, spider) |
| 150 | + page = resp1.meta["playwright_page"] |
| 151 | + await page.context.browser.close() |
| 152 | + req2 = Request(server.urljoin("/gallery.html"), meta={"playwright": True}) |
| 153 | + resp2 = await handler._download_request(req2, spider) |
| 154 | + assert_correct_response(resp1, req1) |
| 155 | + assert_correct_response(resp2, req2) |
| 156 | + assert ( |
| 157 | + self._caplog.record_tuples.count( |
| 158 | + ( |
| 159 | + "scrapy-playwright", |
| 160 | + logging.DEBUG, |
| 161 | + "Browser chromium disconnected (remote=False)", |
| 162 | + ) |
| 163 | + ) |
| 164 | + == 2 # one mid-crawl after calling Browser.close() manually, one at the end |
| 165 | + ) |
| 166 | + assert ( |
| 167 | + self._caplog.record_tuples.count( |
| 168 | + ( |
| 169 | + "scrapy-playwright", |
| 170 | + logging.INFO, |
| 171 | + "Launching browser chromium", |
| 172 | + ) |
| 173 | + ) |
| 174 | + == 2 # one at the beginning, one after calling Browser.close() manually |
| 175 | + ) |
0 commit comments