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 dataclasses import dataclass
|
||||||
from urllib.parse import parse_qsl, urlencode, urlparse, urlsplit, urlunsplit
|
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 TimeoutError as PlaywrightTimeoutError
|
||||||
from playwright.sync_api import sync_playwright
|
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:
|
def _accept_cookies_if_present(page) -> None:
|
||||||
try:
|
try:
|
||||||
page.locator('input[name="cguAcceptees"]').check(timeout=2_000)
|
page.locator('input[name="cguAcceptees"]').check(timeout=2_000)
|
||||||
except (AttributeError, PlaywrightTimeoutError):
|
except (AttributeError, PlaywrightError, PlaywrightTimeoutError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
for button_name in ("ACCEPTER", "Accepter tous les cookies"):
|
for button_name in ("ACCEPTER", "Accepter tous les cookies"):
|
||||||
try:
|
try:
|
||||||
page.get_by_role("button", name=button_name).click(timeout=2_000)
|
page.get_by_role("button", name=button_name).click(timeout=2_000)
|
||||||
return
|
return
|
||||||
except (AttributeError, PlaywrightTimeoutError):
|
except (AttributeError, PlaywrightError, PlaywrightTimeoutError):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ from contextlib import contextmanager
|
|||||||
from urllib.parse import parse_qs, quote_plus, urlparse
|
from urllib.parse import parse_qs, quote_plus, urlparse
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from playwright.sync_api import Error as PlaywrightError
|
||||||
from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
|
from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
|
||||||
|
|
||||||
from job_research.apec import adapter as adapter_module
|
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
|
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:
|
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"
|
first_result = "https://www.apec.fr/candidat/recherche-emploi.html/emploi/detail-offre/111?motsCles=alpha&page=0&selectedIndex=0"
|
||||||
page = _FakeDetailPage(
|
page = _FakeDetailPage(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user