at 25.11-pre 2.1 kB view raw
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)