nixpkgs/nixos/tests/playwright-python.nix
2025-02-07 12:20:02 +01:00

60 lines
2.0 KiB
Nix

import ./make-test-python.nix (
{ pkgs, ... }:
{
name = "playwright-python";
meta = with pkgs.lib.maintainers; {
maintainers = [ phaer ];
};
nodes.machine =
{ pkgs, ... }:
{
environment.variables = {
NIX_MANUAL_DOCROOT = "file://${pkgs.nix.doc}/share/doc/nix/manual/index.html";
PLAYWRIGHT_BROWSERS_PATH = pkgs.playwright-driver.browsers;
};
environment.systemPackages = [
(pkgs.writers.writePython3Bin "test_playwright"
{
libraries = [ pkgs.python3Packages.playwright ];
}
''
import sys
from playwright.sync_api import sync_playwright
from playwright.sync_api import expect
browsers = {
"chromium": {'args': ["--headless", "--disable-gpu"], 'channel': 'chromium'},
"firefox": {},
"webkit": {}
}
if len(sys.argv) != 3 or sys.argv[1] not in browsers.keys():
print(f"usage: {sys.argv[0]} [{'|'.join(browsers.keys())}] <url>")
sys.exit(1)
browser_name = sys.argv[1]
url = sys.argv[2]
browser_kwargs = browsers.get(browser_name)
args = ' '.join(browser_kwargs.get('args', []))
print(f"Running test on {browser_name} {args}")
with sync_playwright() as p:
browser = getattr(p, browser_name).launch(**browser_kwargs)
context = browser.new_context()
page = context.new_page()
page.goto(url)
expect(page.get_by_text("Nix Reference Manual")).to_be_visible()
''
)
];
};
testScript = ''
# FIXME: Webkit segfaults
for browser in ["firefox", "chromium"]:
with subtest(f"Render Nix Manual in {browser}"):
machine.succeed(f"test_playwright {browser} $NIX_MANUAL_DOCROOT")
'';
}
)