okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

nekomimi.petcolab: refresh tokens in the daemon, share the websocket and google oauth code, drop the ssh config editsc9cb3a0

main
2.5 KiB78 linesraw
1"""Optional Chrome scenarios exercise the CDP client against a real browser."""
2
3from __future__ import annotations
4
5from pathlib import Path
6import shutil
7import sys
8import unittest
9
10ROOT = Path(__file__).resolve().parents[2]
11sys.path.insert(0, str(ROOT / "priv" / "python"))
12
13from albedo_plugins.browser import spawn, render, one  # noqa: E402
14
15
16class BrowserIntegrationTest(unittest.IsolatedAsyncioTestCase):
17    """End-to-end integration tests using local Chromium if present."""
18
19    async def asyncSetUp(self):
20        self.has_chrome = (
21            shutil.which("chromium") is not None
22            or shutil.which("google-chrome") is not None
23            or Path("/Applications/Chromium.app/Contents/MacOS/Chromium").exists()
24            or Path(
25                "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
26            ).exists()
27        )
28
29    async def test_spawn_navigate_observe_interact_close(self):
30        if not self.has_chrome:
31            self.skipTest("No Chrome or Chromium installed on this system")
32
33        b = await spawn(headless=True)
34        try:
35            page = await b.new_page()
36            html = (
37                "data:text/html,"
38                "<!doctype html>"
39                "<html><head><title>Albedo Test</title></head>"
40                "<body>"
41                "<h1>Header</h1>"
42                "<label for='name'>Name</label><input id='name' value='initial'>"
43                "<button id='save' onclick='window.clicked=true'>Save</button>"
44                "</body></html>"
45            )
46            await page.goto(html)
47
48            # Observe
49            obs = await page.observe()
50            self.assertEqual(obs["title"], "Albedo Test")
51            text = render(obs)
52            self.assertIn("Header", text)
53            self.assertIn("Save", text)
54
55            # Find and One
56            btn = one(obs, role="button", name="Save")
57            self.assertIsNotNone(btn)
58            field = one(obs, role="textbox", name="Name")
59            self.assertIsNotNone(field)
60
61            # Fill and Click
62            await page.fill(field, "new value")
63            self.assertEqual(
64                await page.evaluate("document.querySelector('#name').value"),
65                "new value",
66            )
67
68            await page.click(btn)
69            self.assertTrue(await page.evaluate("window.clicked"))
70
71            # Close page
72            await page.close()
73        finally:
74            await b.close()
75
76
77if __name__ == "__main__":
78    unittest.main()