Skip to content

Python: capture the native element tree per action in trace mode #570

Open

Description

@vishnuv688

What

On a native Appium session, the Python adapter's trace actions carry a screenshot and nothing else: no element list, no locators, an empty A11y tab. The WebdriverIO service, Selenium (Node.js) and Nightwatch read the app's page source on every native action capture in trace mode (#569 for the latter two), so their native traces carry the element tree. Python is the one ✕ in the capability matrix's "Native app element list and accessibility tree per action (trace mode)" row.

Why it happens

instrumentation.py takes no per-action snapshot on a native app: the action-snapshot path is gated off for native sessions, so only the row screenshot is recorded and no page source is read.

What a fix needs

  • Read GET /session/:id/source on each capturing command of a native session in trace mode, through the guarded executor so it renders no row and lands in no wait poll.
  • Build the snapshot text and element locators from it. Core's fromPageSource (serializeMobileSnapshot plus generateAllElementLocators) does this in TypeScript; Python cannot import core, so either mirror it (with mirror-vectors.json cases) or have the backend build it, as it already does for other trace content Python cannot produce.
  • Take the platform from the session capabilities (platformName, flat or under appium:options), as core's nativeAppOf does.
  • Skip a webview's HTML page source, as Capture the native element tree per action in Selenium and Nightwatch #569 does.
  • Time it as the pageSource probe under DEVTOOLS_CAPTURE_TIMING=1; it is the costly part of a native capture, most of it on iOS (Trace mode: measure where per-action capture time goes, per platform #516).
  • Flip the Python cell in packages/conformance/src/features.ts, regenerate the README and docs-site tables.

Follow-up from #516 / #563.

Activity

  1. self-assigned this
    on Nov 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions