Skip to main content

Build a standalone, interactive HTML live view from an Appium page source (XML) + screenshot

Project description

appium-live-view (Python)

Build a standalone, interactive HTML live view — the Appium Inspector experience (hover to highlight, click to inspect attributes + locators, a selectable source tree, an XPath tester) — from a page source (XML) + screenshot. No server, no browser, no Node: one function returns a self-contained HTML string you can attach to Allure or save anywhere.

It's the Python counterpart of the Appium plugin / JS renderer. The interactive CSS + JS are shared verbatim with the JS renderer (generated by tools/extract-assets.mjs), so both produce the same live view.

Install

pip install ./python          # from this repo
# or, once published:
pip install appium-live-view

Use

from appium_live_view import build_live_view_html
import allure

html = build_live_view_html(
    driver.page_source,                 # XML string
    driver.get_screenshot_as_png(),     # raw PNG bytes (also accepts base64 or a data: URI)
    title="Login screen",
    platform_name=driver.capabilities.get("platformName"),
)
allure.attach(html, "Live view", allure.attachment_type.HTML)

A pytest failure hook is a natural home:

import pytest, allure
from appium_live_view import build_live_view_html

@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    report = outcome.get_result()
    driver = getattr(item.instance, "driver", None)
    if report.when == "call" and report.failed and driver is not None:
        html = build_live_view_html(driver.page_source, driver.get_screenshot_as_png())
        allure.attach(html, "Live view", allure.attachment_type.HTML)

API

build_live_view_html(xml=None, screenshot=None, *, title=None, platform_name=None, selected_path=None, context=None, webview_rect=None, parsed=None) -> str

  • xml — Appium page source (driver.page_source).
  • screenshot — raw PNG bytes, a base64 str, or a full data: URI. Optional (overlays still work without it).
  • selected_path — dot-separated node path to pre-select (e.g. the element a step acted on).
  • context"web" / "native" to force locator style + coordinate handling (else auto-detected from the snapshot root).
  • webview_rect{"x", "y", "width", "height"} in CSS px: the WebView's on-screen rectangle, for a full-device screenshot (iOS Safari / a hybrid WebView below a native bar). Overlays are offset by x/y. Not needed for a web-viewport screenshot (Android Chrome).

Also exported: parse_source, parse_coordinates, suggest_locators, absolute_xpath, and WEB_SNAPSHOT_JS.

WebView / hybrid context

In a WebView context driver.page_source is HTML without coordinates. Run the DOM snapshot script in the webview to capture tags + attributes + bounds, then render with context="web" (CSS + DOM-XPath locators):

from appium_live_view import WEB_SNAPSHOT_JS, build_live_view_html

source = driver.execute_script(WEB_SNAPSHOT_JS)          # in the webview context
html = build_live_view_html(source, driver.get_screenshot_as_png(), context="web")

The snapshot records on-device geometry (devicePixelRatio, viewport, screen size), so overlays scale per device and a web-viewport screenshot (Android Chrome) lines up automatically. A full-device screenshot (iOS Safari, or a hybrid WebView below a native bar) has the web content offset from the top; that offset isn't visible to the page, so pass the WebView's on-screen rectangle (CSS px, e.g. from Appium's native context) as webview_rect:

html = build_live_view_html(
    source, driver.get_screenshot_as_png(), context="web",
    webview_rect={"x": 0, "y": 59, "width": 393, "height": 659},
)

Notes

  • Interactivity inline in Allure 3: hover and click-to-pin and the source tree are pure CSS and work inline; copy, the XPath tester and the download buttons need JavaScript, which Allure strips from inline attachments. Open the attachment standalone, or apply the report patch in ../examples/allure-inline-interactive/.
  • Requires Python 3.8+, no third-party dependencies.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

appium_live_view-0.1.3.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

appium_live_view-0.1.3-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

File details

Details for the file appium_live_view-0.1.3.tar.gz.

File metadata

  • Download URL: appium_live_view-0.1.3.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Artix Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for appium_live_view-0.1.3.tar.gz
Algorithm Hash digest
SHA256 c724b17db43f0b269cf6625ed33cde7b66f6c85472f6ac7afba53eddf958aadd
MD5 9fdb5c416fff946c74c80192acaf3052
BLAKE2b-256 0140ca5f0f466ca247cf73960db3ae295992a6d7bc3d8cfde3dbd4e7cf80f23f

See more details on using hashes here.

File details

Details for the file appium_live_view-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: appium_live_view-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 21.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Artix Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for appium_live_view-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 80ebafa242684aa6b9db6f5df74aa575ae41bfe8b056e3f3b16bf71f62beeee7
MD5 e6f7f5c41d525512efa11338bbe2f017
BLAKE2b-256 9c403b4d0c0bb3bcbbb709dadaa87f3c4003b3f4e07da7b368ecdb6a7703e089

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page