from __future__ import annotations from context_extractor import AsyncExtractorSession, ExtractorSession, __version__ def test_version_semverish(): assert __version__.count(".") >= 1 def test_capture_console_errors_and_network(page, fixture_url): session = ExtractorSession(page) page.goto(fixture_url, wait_until="domcontentloaded") page.wait_for_timeout(150) store = session.get_store() levels = {e["level"] for e in store["console"]} assert "warn" in levels assert "error" in levels or any("error" in (e.get("msg") or "").lower() for e in store["console"]) assert any(e["msg"] == "fixture boom" or "fixture boom" in (e.get("msg") or "") for e in store["errors"]) assert store["network"], "expected at least the document request" def test_extract_markdown_body_and_selector(page, fixture_url): session = ExtractorSession(page) page.goto(fixture_url, wait_until="domcontentloaded") full = session.extract_markdown() assert full["title"] == "Context Extractor Fixture" assert "Fixture Page" in full["markdown"] assert "**world**" in full["markdown"] assert "[docs](/docs)" in full["markdown"] assert "- Alpha" in full["markdown"] scoped = session.extract_markdown("#main-content") assert scoped["selector"] == "#main-content" assert "Section" in scoped["markdown"] assert "Skip this noise" not in scoped["markdown"] def test_hidden_nodes_are_excluded_from_markdown(page, fixture_url): """Regression test: SPAs (e.g. LinkedIn) stash hydration/experiment JSON in hidden DOM nodes, not just