Changelog

View Source

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog.

[0.10.0-rc.0] 2025-11-19

Breaking changes

  • Use browser pool by default, instead of starting new browser per test suite. Commit 095e216
      # test_helper.exs
    + {:ok, _} = PhoenixTest.Playwright.Supervisor.start_link()
      Application.put_env(:phoenix_test, :base_url, MyAppWeb.Endpoint.url())
  • Changes required if internals (beyond PhoenixTest and PhoenixTest.Playwright modules) were used. Phoenix-agnostic modules moved to PlaywrightEx, with slight API changes. Example:
    - |> unwrap(& {:ok, _} = PhoenixTest.Playwright.Frame.click(&1.frame_id, selector))
    + |> unwrap(& {:ok, _} = PlaywrightEx.Frame.click(&1.frame_id, selector: selector, timeout: @timeout))

Changed

  • Ecto sandbox ownership: Use a separate sandbox owner process instead of the test process. This reduces ownership errors when LiveViews continue to use database connections after the test terminates. Commit 3b54699

Added

  • Config option ecto_sandbox_stop_owner_delay: Delay in milliseconds before shutting down the Ecto sandbox owner. Use when LiveViews or other processes need time to stop using the connections. Commit 2f4a8cf

[0.9.1] 2025-10-29

Added

  • Browser pooling (opt-in): Reduced memory, higher speed.. Commit 00e75c6

[0.9.0] 2025-10-26

Fixed

  • assert_has/refute_has: don't raise if multiple nodes found when using value option (playwright strict mode). Commit 73ebf10

Changed

  • Return result tuples from all playwright channel functions for consistency and to surface errors early. Commit ae63989
    • Most notably may affect callers of Frame.evaluate/3

Added

  • Register custom selector engines via new config option selector_engines. Commit 73ebf10
  • Import click/2 in Playwright.Case. Commit 968d5cd
  • Add drag and drop: drag(source, to: target). Commit f4161bd

[0.8.0] 2025-09-17

Removed

  • Config option cli. Use assets_dir instead. Commit 9e95e54

Added

  • Support bunx JS runner. Added config options runner and assets_dir. Commit 9e95e54
  • Support missing assert_has/refute_has options: label and value. Commit 2e92cbe
  • Support phoenix_test 0.8 (lazy_html). Commit 1074cde

Changed

  • Include source location when logging javascript errors and browser console logs. Commit 6b148f
  • Only consider visible inputs for fill_in etc. Commit 86c2e3d
  • Speed up refute_has: Use playwright browser internal retry. Commit aac0497

[0.7.1] 2025-07-01

Added

  • Config option executable_path: allow using existing browser executable instead of bundled browser (e.g. on NixOS). Commit 15df46

Fixed

  • refute_has/3 add retry, don't fail if element initially found. Commit 7bd49b

[0.7.0] 2025-06-16

Added

Removed

  • Connection.received/1. Commit 4eadea
    • Use EventRecorder instead

[0.6.3] 2025-05-05

Added

  • Add locale to avoid console warnings. Commit [becf5e6] @peaceful-james

Fixed

  • Trigger phx-change event for input with phx-debounce="blur". Commit 72edd9

[0.6.2] 2025-04-24

Changed

  • Frame.evaluate/3: Don't transform map keys in return value. Example: js {camelCase: {a: 1}} -> ex %{"camelCase": %{"a": 1}}. Previously attempted to underscore and atom-ize keys, which led to issue #24. Commit 5ff530

[0.6.1] 2025-04-02

Added

  • Support relevant phoenix_test 0.6 features
    • ✅ Deprecate select with :from in favor of :option (handled by PhoenixTest)
    • ✅ Allow nesting of within/3
    • ✅ Allow calling visit/2 sequentially (was already supported)
    • ❌ Raise error when visiting a defined route: In a feature test, we assert on the rendered page, not the status code.

[0.6.0] 2025-03-18

Added

  • Add and remove cookies: add_cookies/2, add_session_cookie/3, clear_cookies/{1,2} @peaceful-james
  • Add option browser_launch_timeout for more fine-grained control (is typically a lot slower than other actions) @s3cur3

[0.5.0] 2025-02-14

Added

  • Docs: Document and validate global and per-test configuration
  • Docs: Document non-standard driver functions (click/4, click_button/4 etc.). Also, exclude standard driver functions from docs.
  • Config: Override config via Case opts, e.g. use PhoenixTest.Playwright.Case, headless: false
  • Keyboard simulation: type/{3,4} and press/{3,4}

Changed

  • Renamed: PheonixTest.Case to PhoenixTest.Playwright.Case
       defmodule MyTest do
    -    use PhoenixTest.Case, async: true
    +    use PhoenixTest.Playwright.Case, async: true
    -    @moduletag :playwright

[0.4.0] 2025-02-03

Added

  • Screenshots: screenshot/{2,3} function and screenshot: true config for auto-capture @s3cur3

Changed

  • Config: flattened list (remove nested browser config), override via top-level ExUnit @tag ...s (remove nested @tag playwright: [...])
       # config/test.exs
       config :phoenix_test,
         playwright: [
    -      browser: [browser: :chromium, headless: false, slow_mo: 0]
    +      browser: :chromium,
    +      headless: false,
    +      slow_mo: 0

[0.3.0] 2025-01-26

Changed

  • Auto-convert case of playwright messages keys (snake_case to camelCase)

[0.2.1] 2025-01-17

Added

  • Add more config options (browser, JS console) @s3cur3

Changed

  • Improve error messages @s3cur3
  • Improve setup and docs for contributors @s3cur3

[0.2.0] 2025-01-09

Added

  • support phoenix_test@0.5, elixir@1.18, phoenix_live_view@1.0

[0.1.5] 2024-12-15

Added

  • @tag trace: :open to auto open recorded Playwright trace in viewer