Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

testmuai-playwright-bindings

PyPI version Python versions License: MIT

TestMu binding for Playwright Python — a thin test runtime for running TestMu-exported tests locally or on the LambdaTest grid.

Installation

pip install testmuai-playwright-bindings

Then install the Playwright browsers (one-time):

playwright install

Quick Start

Set credentials (LambdaTest grid) once in your environment:

export LT_USERNAME="your_username"
export LT_ACCESS_KEY="your_access_key"

Then write a test:

import testmu

@testmu.test
async def my_test(page):
    async with testmu.step("Open site"):
        await page.goto("https://example.com")

    async with testmu.step("Verify title"):
        await testmu.expect(page).to_have_title("Example Domain")

testmu.run(my_test)

testmu.run() is a synchronous entry point — it sets up the session, launches the browser, runs your test, and tears everything down.

Configuration

Configuration is sourced from environment variables. See .env.example for the full list. The most common ones:

Variable Purpose Required
LT_USERNAME LambdaTest grid username For cloud features
LT_ACCESS_KEY LambdaTest grid access key For cloud features
TESTMU_HEADLESS true (default) or false No
TESTMU_SMART 1 to enable vision/heal AI features No

Test-level metadata (build, name, variables, etc.) can be passed via testmu.configure(...) at the top of generated test files.

Runtime modes (kane_version)

Generated tests pick a runtime mode with testmu.configure(kane_version=...): "v4" (the default) or "v3". Every public name (testmu.var, testmu.execute_js, testmu.Condition, …) follows the mode at call time, so a name imported before configure() runs still does the right thing:

import testmu
from testmu import var            # bound before configure()

testmu.configure(kane_version="v3")
var("{{price}}")                  # served by the v3 implementation

Package layout (for contributors)

The two modes live in separate implementation packages behind a small shared layer, so a change to one mode can't change the other:

Path What
testmu/__init__.py public surface: shared names + per-mode forwarders
testmu/_router.py picks the mode's package on each call; installs the heal patch on Locator once
testmu/_configure.py, _config.py, _errors.py, _step.py, _heal_cache.py, _test_state.py shared: one of each whatever the mode
testmu/_condition_enums.py, _devtools_types.py, _clipboard_store.py shared classes identical in both modes (PossibleCondition, NetworkEntry, ClipboardStore, …): testmu.<name> is the real class
testmu/_aliases.py keeps old private paths working (below)
testmu/_v4/ the v4 implementation
testmu/_v3/ the v3 implementation

_v4/ and _v3/ never import each other; each imports only itself and the shared modules. Neither checks kane_version: the router already picked the package, so each holds only its own mode's code paths. A change for one mode goes in that mode's folder only; a fix both modes need is made in both. Tests follow the same split: tests/v4/, tests/v3/ (where v3 is the default mode) and tests/shared/ (public surface, routing, aliases).

Old private paths still work. Modules that used to live at testmu.<name> (testmu._vars, testmu._helpers.devtools_network, testmu.playwright_async, …) are aliases of the v4 modules: importing the old path returns the same module object, so state and mock.patch / setattr through it reach the real module. Old paths always mean v4. Prefer the public testmu.<name> API, which follows the configured mode.

Routed classes. testmu.Condition and testmu.ResolvedCondition differ by mode, so they are proxies: calling one builds the active mode's class, and isinstance holds for either mode's instances. They can't be subclassed (TypeError), and typing.get_type_hints on them is empty. Every other public class is identical in both modes and is exported as the real class.

Features

  • @testmu.test — decorator that wraps async Playwright tests with session lifecycle management
  • testmu.step(...) — context manager for structured test steps
  • testmu.var() / testmu.set_var() — template-based variable resolution (with ATMS lookup when authed)
  • Helpers — execute_js, execute_api, execute_db, vision_query, network_query, smartui_snapshot_async, and more
  • Reporters — local console reporter and TestMu cloud reporter (LambdaTest dashboard)
  • Self-healing locators — automatic locator recovery via heal patch (when smart mode enabled)

Requirements

  • Python ≥ 3.11
  • Playwright ≥ 1.57.0

License

Released under the MIT License.

Metadata

Release files for testmuai-playwright-bindings 0.1.47b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for testmuai-playwright-bindings 0.1.47b1
File Size Uploaded
testmuai_playwright_bindings-0.1.47b1.tar.gz 473.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for testmuai-playwright-bindings 0.1.47b1
File Interpreter ABI Platform
testmuai_playwright_bindings-0.1.47b1-py3-none-any.whl Python 3 none any Details

Total release size: 1.0 MB

Release files / testmuai_playwright_bindings-0.1.47b1.tar.gz

Download URL testmuai_playwright_bindings-0.1.47b1.tar.gz
Size 473.5 kB
Tags Source
SHA-256 checksum
How to use checksums
dc4251fbe01f342f305ceb98ad61c0430ab4c4279c9402e1d8a2ed924d7f9a0a
BLAKE2b-256 checksum
How to use checksums
366dbaf1e7f7c82366a6fca7f43b57e0cc7c373df96928d5e2d33d0edc29b6ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release files / testmuai_playwright_bindings-0.1.47b1-py3-none-any.whl

Download URL testmuai_playwright_bindings-0.1.47b1-py3-none-any.whl
Size 556.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d52dcc7e8982809b314c7024599090f2e22a21618affc5bf327de3ece28040ce
BLAKE2b-256 checksum
How to use checksums
b653b57636b278cd7476db18bcb9b99a2e0d71e897119936f0a44ccd2b881c2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release history Release notifications | RSS feed

0.1.48

2 release files

This release

0.1.47b1 This release

2 release files

0.1.42

2 release files

0.1.41

2 release files

0.1.40

2 release files

0.1.39

2 release files

0.1.38

2 release files

0.1.35

2 release files

0.1.33

2 release files

0.1.32

2 release files

0.1.31

2 release files

0.1.30

2 release files

0.1.26

2 release files

0.1.25

2 release files

0.1.24

2 release files

0.1.21

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page