1import ./make-test-python.nix (
2 { pkgs, ... }:
3 {
4 name = "playwright-python";
5
6 meta = with pkgs.lib.maintainers; {
7 maintainers = [ phaer ];
8 };
9
10 nodes.machine =
11 { pkgs, ... }:
12 {
13 environment.variables = {
14 NIX_MANUAL_DOCROOT = "file://${pkgs.nix.doc}/share/doc/nix/manual/index.html";
15 PLAYWRIGHT_BROWSERS_PATH = pkgs.playwright-driver.browsers;
16 };
17 environment.systemPackages = [
18 (pkgs.writers.writePython3Bin "test_playwright"
19 {
20 libraries = [ pkgs.python3Packages.playwright ];
21 }
22 ''
23 import sys
24 import re
25 from playwright.sync_api import sync_playwright
26 from playwright.sync_api import expect
27
28 browsers = {
29 "chromium": {'args': ["--headless", "--disable-gpu"], 'channel': 'chromium'},
30 "firefox": {},
31 "webkit": {}
32 }
33 needle = re.compile("Nix.*Reference Manual")
34 if len(sys.argv) != 3 or sys.argv[1] not in browsers.keys():
35 print(f"usage: {sys.argv[0]} [{'|'.join(browsers.keys())}] <url>")
36 sys.exit(1)
37 browser_name = sys.argv[1]
38 url = sys.argv[2]
39 browser_kwargs = browsers.get(browser_name)
40 args = ' '.join(browser_kwargs.get('args', []))
41 print(f"Running test on {browser_name} {args}")
42 with sync_playwright() as p:
43 browser = getattr(p, browser_name).launch(**browser_kwargs)
44 context = browser.new_context()
45 page = context.new_page()
46 page.goto(url)
47 expect(page.get_by_text(needle)).to_be_visible()
48 ''
49 )
50 ];
51 };
52
53 testScript = ''
54 # FIXME: Webkit segfaults
55 for browser in ["firefox", "chromium"]:
56 with subtest(f"Render Nix Manual in {browser}"):
57 machine.succeed(f"test_playwright {browser} $NIX_MANUAL_DOCROOT")
58 '';
59
60 }
61)