Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/windowed-list-row-key.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'e2e': patch
---

A recorded tap on a row of a windowed list no longer depends on which row the list rendered first. The container key of a row was its list's first text, a scroll position on Android (`Row 0512 in Row 0500`), so the replay found the row and still handed off whenever the window started one row later.
12 changes: 8 additions & 4 deletions .github/workflows/mobile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,13 @@ name: mobile
# booted device and, when a test fails, runs the failed tests once more with
# `--last-failed` before the job goes red (agent-device's runtime has episodes
# of its own on a shared machine, #502). The agentic suite replays the
# recordings committed under .e2e/cache, read-only in CI, and calls the model
# for a step with none, so on a pull request it runs for this repository's
# branches only, and not for Dependabot's, whose runs get no secrets either.
# recordings committed under .e2e/cache and calls the model for a step with
# none, so on a pull request it runs for this repository's branches only,
# and not for Dependabot's, whose runs get no secrets either. Android runs
# it with `--strict-cache`, the way benchmark.yml runs the web one: a
# committed recording that no longer replays fails the job as REPLAY_STALE
# instead of spending model calls on every run. iOS replays leniently until
# the three scenarios the README names replay on a simulator.
# The merge queue runs with this repository's secrets, so it runs the agentic
# suite for every pull request. Both platforms' entries are recorded on a Mac
# (an iPhone 17 Pro simulator, a 1080x2400 emulator) and committed with the
Expand Down Expand Up @@ -303,7 +307,7 @@ jobs:
GITHUB_TOKEN: ${{ github.token }}
E2E_MOBILE_BENCHMARK_ANDROID_APP: ${{ steps.app.outputs.app-path }}
E2E_MOBILE_BENCHMARK_COMMENT: android${{ matrix.suite == 'agentic' && ' agent' || '' }}
E2E_RUN: node node_modules/e2e/dist/cli/bin.js run --target android-emulator ${{ matrix.suite == 'agentic' && '--config e2e.agent.config.ts --output .e2e/agent' || '' }}
E2E_RUN: node node_modules/e2e/dist/cli/bin.js run --target android-emulator ${{ matrix.suite == 'agentic' && '--config e2e.agent.config.ts --output .e2e/agent --strict-cache' || '' }}
- name: Failure screens
if: ${{ failure() }}
working-directory: apps/mobile-benchmark
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
{
"schemaVersion": "trace-1",
"createdAt": "2026-10-09T07:03:49.368Z",
"payload": {
"actions": [
{
"name": "tapAt",
"summary": "tap the point (187, 451) on other \"Use tester@tester.army / <secret:benchm…\"",
"point": {
"x": 187,
"y": 451
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
},
"fx": 0.4652,
"fy": 0.442
}
},
{
"name": "tool",
"summary": "tool type (run-time value)",
"derived": "pixels"
},
{
"name": "tapAt",
"summary": "tap the point (182, 527) on other \"Use tester@tester.army / <secret:benchm…\"",
"point": {
"x": 182,
"y": 527
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
},
"fx": 0.4527,
"fy": 0.5422
}
},
{
"name": "tool",
"summary": "tool type (run-time value)",
"derived": "pixels"
},
{
"name": "tapAt",
"summary": "tap the point (206, 285) on other \"Use tester@tester.army / <secret:benchm…\"",
"point": {
"x": 206,
"y": 285
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
},
"fx": 0.5124,
"fy": 0.223
}
},
{
"name": "tapAt",
"summary": "tap the point (182, 463) on other \"Use tester@tester.army / <secret:benchm…\"",
"point": {
"x": 182,
"y": 463
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
},
"fx": 0.4527,
"fy": 0.4578
}
},
{
"name": "tapAt",
"summary": "tap the point (182, 604) on key \"t\"",
"point": {
"x": 182,
"y": 604
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "key",
"name": "t"
},
"fx": 0.4915,
"fy": 0.2593
}
},
{
"name": "tapAt",
"summary": "tap the point (182, 520) on other \"Use tester@tester.army / <secret:benchm…\"",
"point": {
"x": 182,
"y": 520
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
},
"fx": 0.4527,
"fy": 0.533
}
},
{
"name": "tapAt",
"summary": "tap the point (182, 452) on other \"Use tester@tester.army / <secret:benchm…\"",
"point": {
"x": 182,
"y": 452
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
},
"fx": 0.4527,
"fy": 0.4433
}
},
{
"name": "tap",
"summary": "tap key \"delete\"",
"target": {
"role": "key",
"name": "delete",
"testId": "delete",
"selector": "id=delete"
}
},
{
"name": "tapAt",
"summary": "tap the point (182, 527) on other \"Use tester@tester.army / <secret:benchm…\"",
"point": {
"x": 182,
"y": 527
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
},
"fx": 0.4527,
"fy": 0.5422
}
},
{
"name": "pressKey",
"summary": "press \"Enter\" on the focused field",
"key": "Enter"
},
{
"name": "tapAt",
"summary": "tap the point (198, 596) on other \"Use tester@tester.army / <secret:benchm…\"",
"point": {
"x": 198,
"y": 596
},
"viewport": {
"width": 402,
"height": 874
},
"within": {
"target": {
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
},
"fx": 0.4925,
"fy": 0.6332
}
},
{
"name": "tap",
"summary": "tap button \"Not Now\"",
"target": {
"role": "button",
"name": "Not Now"
}
}
],
"executor": {
"name": "e2e-default-agent",
"version": "2"
},
"recordedFor": {
"testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Flattened%20Login",
"targetId": "ios-simulator",
"instructionDigest": "2ac57f8c28a31069613ffb9bbf8151a42ea8ceb4bb65d0ad6dcd9eea0b8a2755",
"paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a",
"callIndex": 0,
"agent": "default"
},
"summary": "Entered the hinted email and password, submitted the login, dismissed the Save Password prompt, and verified the screen says “Logged in successfully.”",
"startPath": "dev.e2e.benchmark / Benchmark Examples",
"endPath": "dev.e2e.benchmark / Benchmark Examples",
"endAnchors": [
{
"role": "other",
"name": "Logged in successfully"
}
],
"goneAnchors": [
{
"role": "other",
"name": "Use tester@tester.army / <secret:benchmark.password>, Email, Password, SIGN IN"
}
],
"endWaitMs": 14199,
"keyedBy": {
"cacheSchema": "trace-1",
"policyVersion": "conservative/6",
"project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643",
"platform": "ios",
"engineName": "mobile",
"engineSpiVersion": 1,
"appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae",
"agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a"
}
}
}

This file was deleted.

Loading
Loading