fix: ignore Playwright consent widget errors
This commit is contained in:
parent
85c4278db3
commit
e9db6b48d9
@ -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
|
||||
|
||||
|
||||
|
||||
@ -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(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user