Playwright: Difference between revisions

add link
Tags: Mobile edit Mobile web edit
Joshbuker (talk | contribs)
Fix shell.nix example not setting allowUnfree = true, which can cause it to fail in some situations
 
(3 intermediate revisions by one other user not shown)
Line 8: Line 8:
An example <code>shell.nix</code> that installs [[ Visual Studio Code ]] and Playwright.
An example <code>shell.nix</code> that installs [[ Visual Studio Code ]] and Playwright.


<syntaxHighlight lang=nix>
<syntaxhighlight lang="nix">
{ pkgs ? import <nixpkgs> {} }:
{ pkgs ? import <nixpkgs> { config.allowUnfree = true; } }:
   pkgs.mkShell {
   pkgs.mkShell {
     nativeBuildInputs = with pkgs; [
     nativeBuildInputs = with pkgs; [
       vscode # if you want vscode
       vscode # if you want vscode
       nodejs_latest
       nodejs_latest
       playwright-driver.browsers
       playwright-driver.browsers # !!! Make sure it has the same version as npm's version!!
     ];
     ];


Line 21: Line 21:
       export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=true
       export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=true
       export PLAYWRIGHT_HOST_PLATFORM_OVERRIDE="ubuntu-24.04" # Seems like it is not needed?
       export PLAYWRIGHT_HOST_PLATFORM_OVERRIDE="ubuntu-24.04" # Seems like it is not needed?
    '';
}
</syntaxhighlight>
{{Note|The version of Playwright in Nixpkgs and your node developer environment (in <code>package[-lock].json</code>) must match. See [https://www.nixhub.io/packages/playwright nixhub] to see if there is a version that matches npm in nixpkgs, if not you can also downgrade npm's version via <code>npm install playwright@nixversion</code>. See also [https://discourse.nixos.org/t/running-playwright-tests/25655 this discussion].}}
== Using flake ==
This can easily be adapted within a flake like:
<syntaxHighlight lang=nix>
{
  description = "A very basic flake";
  inputs = {
    flake-parts.url = "github:hercules-ci/flake-parts";
    nixpkgs.url = "github:nixos/nixpkgs";
  };
 
  outputs = { flake-parts, ... } @ inputs: flake-parts.lib.mkFlake { inherit inputs; } {
    perSystem = { config, self', inputs', pkgs, system, ... }: {
      devShells.default = pkgs.mkShell {
        nativeBuildInputs = with pkgs; [
          nodejs_latest
          playwright-driver.browsers
        ];


      # These lines are needed if the npm-installed version of playwright (in package[-lock].json)
        shellHook = ''
      # does not match the nix version of playwright contained in pkgs.
          export PLAYWRIGHT_BROWSERS_PATH=${pkgs.playwright-driver.browsers}
      # (by default each playwright version hardcoded a specific version of the browser for extra compatibility)
          export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=true;
      export PLAYWRIGHT_NODEJS_PATH=${pkgs.nodejs_latest}/bin/node
        '';
       playwright_chromium_revision="$(${pkgs.jq}/bin/jq --raw-output '.browsers[] | select(.name == "chromium").revision' ${pkgs.playwright-driver}/browsers.json)"
       };
      export PLAYWRIGHT_LAUNCH_OPTIONS_EXECUTABLE_PATH=${pkgs.playwright-driver.browsers}/chromium-$playwright_chromium_revision/chrome-linux/chrome
    };
    '';
    # Declared systems that your flake supports. These will be enumerated in perSystem
    systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
  };
}
}
</syntaxHighlight>
</syntaxHighlight>
{{Note|The version of Playwright in Nixpkgs and your node developer environment (in <code>package[-lock].json</code>) must match unless you define <code>PLAYWRIGHT_LAUNCH_OPTIONS_EXECUTABLE_PATH</code> as shown above to force playwright to use a different browser than the hardcoded version. See also [https://discourse.nixos.org/t/running-playwright-tests/25655 this discussion].}}


== Using Devenv ==
== Using Devenv ==