62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_playwright(monkeypatch):
|
|
pw = MagicMock()
|
|
ctx = MagicMock()
|
|
page = MagicMock()
|
|
ctx.pages = [page]
|
|
pw.chromium.launch_persistent_context.return_value = ctx
|
|
|
|
sp = MagicMock()
|
|
sp.start.return_value = pw
|
|
monkeypatch.setattr("service.rpa_helpers.browser.sync_playwright", lambda: sp)
|
|
|
|
return {"pw": pw, "ctx": ctx, "page": page, "sp": sp}
|
|
|
|
|
|
def test_launch_browser_uses_chrome_channel_default(mock_playwright, monkeypatch, tmp_path):
|
|
monkeypatch.setenv("OPENCLAW_PLAYWRIGHT_STEALTH", "1")
|
|
monkeypatch.setattr(
|
|
"service.rpa_helpers.browser.resolve_chromium_channel",
|
|
lambda: "chrome",
|
|
)
|
|
prof = tmp_path / "p1"
|
|
from service.rpa_helpers.browser import launch_browser_with_profile
|
|
|
|
ctx, page = launch_browser_with_profile(str(prof))
|
|
pw = mock_playwright["pw"]
|
|
kw = pw.chromium.launch_persistent_context.call_args.kwargs
|
|
assert kw["channel"] == "chrome"
|
|
assert "--disable-blink-features=AutomationControlled" in kw["args"]
|
|
assert ctx is mock_playwright["ctx"]
|
|
assert page is mock_playwright["page"]
|
|
|
|
|
|
def test_launch_browser_respects_explicit_channel(mock_playwright, monkeypatch, tmp_path):
|
|
monkeypatch.setenv("OPENCLAW_PLAYWRIGHT_STEALTH", "1")
|
|
prof = tmp_path / "p2"
|
|
from service.rpa_helpers.browser import launch_browser_with_profile
|
|
|
|
launch_browser_with_profile(str(prof), channel="msedge")
|
|
kw = mock_playwright["pw"].chromium.launch_persistent_context.call_args.kwargs
|
|
assert kw["channel"] == "msedge"
|
|
|
|
|
|
def test_launch_browser_creates_profile_dir(mock_playwright, monkeypatch, tmp_path):
|
|
monkeypatch.setenv("OPENCLAW_PLAYWRIGHT_STEALTH", "1")
|
|
monkeypatch.setattr(
|
|
"service.rpa_helpers.browser.resolve_chromium_channel",
|
|
lambda: "chrome",
|
|
)
|
|
prof = tmp_path / "new_prof"
|
|
assert not prof.is_dir()
|
|
from service.rpa_helpers.browser import launch_browser_with_profile
|
|
|
|
launch_browser_with_profile(str(prof))
|
|
assert prof.is_dir()
|