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