je_web_runner.api.debugging
Façade: cross browser parity / pr comment / extension harness.
- class je_web_runner.api.debugging.BrowserRunResult(browser: 'str', title: 'Optional[str]' = None, dom_text: 'Optional[str]' = None, console: 'List[Dict[str, Any]]'=<factory>, network: 'List[Dict[str, Any]]'=<factory>, screenshot: 'Optional[bytes]' = None)
Bases:
object- browser: str
- console: List[Dict[str, Any]]
- dom_text: str | None = None
- network: List[Dict[str, Any]]
- screenshot: bytes | None = None
- title: str | None = None
- exception je_web_runner.api.debugging.CrossBrowserError
Bases:
WebRunnerExceptionRaised when run input shape is invalid.
- exception je_web_runner.api.debugging.ExtensionHarnessError
Bases:
WebRunnerExceptionRaised when manifest is malformed or extension dir is invalid.
- class je_web_runner.api.debugging.ExtensionInfo(name: 'str', version: 'str', manifest_version: 'int', popup: 'Optional[str]' = None, background_script: 'Optional[str]' = None, permissions: 'Optional[List[str]]' = None, extension_dir: 'Optional[str]' = None)
Bases:
object- background_script: str | None = None
- extension_dir: str | None = None
- manifest_version: int
- name: str
- permissions: List[str] | None = None
- popup: str | None = None
- version: str
- class je_web_runner.api.debugging.ParityFinding(browser: 'str', field: 'str', expected: 'Any', actual: 'Any', severity: 'str')
Bases:
object- actual: Any
- browser: str
- expected: Any
- field: str
- severity: str
- class je_web_runner.api.debugging.ParityReport(reference: 'str', findings_by_browser: 'Dict[str, List[ParityFinding]]'=<factory>)
Bases:
object- findings_by_browser: Dict[str, List[ParityFinding]]
- major_findings() List[ParityFinding]
- property matches: bool
- reference: str
- exception je_web_runner.api.debugging.PrCommentError
Bases:
WebRunnerExceptionRaised when posting / updating a PR comment fails.
- class je_web_runner.api.debugging.PrSummary(total: 'int', passed: 'int', failed: 'int', skipped: 'int' = 0, duration_seconds: 'Optional[float]' = None, flaky: 'int' = 0, sections: 'List[Dict[str, Any]]'=<factory>)
Bases:
object- duration_seconds: float | None = None
- failed: int
- flaky: int = 0
- passed: int
- sections: List[Dict[str, Any]]
- skipped: int = 0
- total: int
- je_web_runner.api.debugging.apply_extension_to_chrome_options(options: Any, extensions: Iterable[str | Path]) Any
給 Selenium
ChromeOptions加上--load-extension。 Add--load-extensionflags for each unpacked extension directory.
- je_web_runner.api.debugging.assert_parity(report: ParityReport, allow_fields: Iterable[str] | None = None, only_major: bool = True) None
Raise if any disallowed finding remains.
- je_web_runner.api.debugging.build_summary_markdown(summary: PrSummary, run_url: str | None = None) str
- je_web_runner.api.debugging.diff_runs(runs: Iterable[BrowserRunResult], reference_browser: str | None = None) ParityReport
比對每個 run 與
reference_browser的結果差異 Diff every run againstreference_browser(default: the first run).
- je_web_runner.api.debugging.extension_info(directory: str | Path) ExtensionInfo
Convenience: parse manifest under
directoryand stampextension_dir.
- je_web_runner.api.debugging.parse_manifest(manifest: str | Path | Dict[str, Any]) ExtensionInfo
Parse a manifest dict / file path into
ExtensionInfo.
- je_web_runner.api.debugging.playwright_persistent_context_args(extensions: Iterable[str | Path], user_data_dir: str | Path, headless: bool = False) Dict[str, Any]
Return kwargs for Playwright’s
launch_persistent_context.Playwright requires a persistent context to load a packed extension; headless mode is unreliable for MV3 service workers so the default is
headless=False.
- je_web_runner.api.debugging.post_or_update_comment(repo: str, pr_number: int, body: str, token: str | None = None) Dict[str, Any]
依 marker 判斷新增或覆寫 WebRunner summary 留言 Find the WebRunner-marker comment on this PR and PATCH it; create a new one if no marker comment exists yet.