fix: ignore Playwright consent widget errors

This commit is contained in:
Antoine 2026-06-05 17:40:10 +02:00
parent 85c4278db3
commit e9db6b48d9
2 changed files with 27 additions and 2 deletions

View File

@ -5,6 +5,7 @@ from contextlib import contextmanager
from dataclasses import dataclass
from urllib.parse import parse_qsl, urlencode, urlparse, urlsplit, urlunsplit
from playwright.sync_api import Error as PlaywrightError
from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
from playwright.sync_api import sync_playwright
@ -85,14 +86,14 @@ def _search_url(query: str, search_filters: ApecSearchFilters, page_number: int
def _accept_cookies_if_present(page) -> None:
try:
page.locator('input[name="cguAcceptees"]').check(timeout=2_000)
except (AttributeError, PlaywrightTimeoutError):
except (AttributeError, PlaywrightError, PlaywrightTimeoutError):
pass
for button_name in ("ACCEPTER", "Accepter tous les cookies"):
try:
page.get_by_role("button", name=button_name).click(timeout=2_000)
return
except (AttributeError, PlaywrightTimeoutError):
except (AttributeError, PlaywrightError, PlaywrightTimeoutError):
continue

View File

@ -2,6 +2,7 @@ from contextlib import contextmanager
from urllib.parse import parse_qs, quote_plus, urlparse
import pytest
from playwright.sync_api import Error as PlaywrightError
from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
from job_research.apec import adapter as adapter_module
@ -397,6 +398,29 @@ def test_search_accepts_current_cgu_popin_before_waiting_for_results(monkeypatch
assert page.consent_accepted is True
def test_search_ignores_unexpected_consent_widget_playwright_errors(monkeypatch) -> None:
first_result = "https://www.apec.fr/candidat/recherche-emploi.html/emploi/detail-offre/111?motsCles=alpha&page=0&selectedIndex=0"
page = _FakeDetailPage({"alpha": {0: [first_result]}})
class _ExplodingConsentButton:
def click(self, timeout: int | None = None) -> None:
raise PlaywrightError("consent widget boom")
def exploding_get_by_role(role: str, name: str):
return _ExplodingConsentButton()
monkeypatch.setattr(page, "get_by_role", exploding_get_by_role)
monkeypatch.setattr(adapter_module, "_open_public_page", lambda: _fake_open_public_page(page))
results = ApecAdapter(max_listings=10).search(
["alpha"],
search_filters=ApecSearchFilters(location="France", contract_type="CDI"),
)
assert [result.url for result in results] == [first_result]
assert page.cgu_checkbox_checked is True
def test_search_records_pagination_navigation_failures(monkeypatch) -> None:
first_result = "https://www.apec.fr/candidat/recherche-emploi.html/emploi/detail-offre/111?motsCles=alpha&page=0&selectedIndex=0"
page = _FakeDetailPage(