Two defects found by running spotify_play against the real phone. - Step durations were always zero in the run log: executeStep returned a copy, so the deferred assignment never reached the caller (FR-10). It now returns a named value, with a regression test. - The phone was sitting on the Android Settings app, and wait "Search" was satisfied by Settings' own "Search Settings" entry, so the recipe tapped the Settings search bar. New "foreground" step waits until the recipe's app really is in front; spotify_play uses it right after launch. docs/phase-3-spotify-recipe.md now logs all six live attempts and states plainly that the end-to-end playback run has not completed: the phone is showing a Settings "Verify that it's you" biometric prompt, which needs Sam and is left untouched.
65 lines
2.6 KiB
Plaintext
65 lines
2.6 KiB
Plaintext
# spotify_play — search Spotify for a song and play it.
|
|
#
|
|
# Edit this file by hand. Steps name the text Artemis must find on screen; it
|
|
# taps the centre of the element it matched. There are no coordinates here on
|
|
# purpose, so this recipe survives a Spotify redesign (FR-4).
|
|
#
|
|
# Run it with:
|
|
# artemis run spotify_play query="Rolling Stones Honky Tonk"
|
|
|
|
task: spotify_play
|
|
description: Search Spotify for a song and play it.
|
|
app: com.spotify.music
|
|
|
|
# The caller must supply these.
|
|
param: query
|
|
|
|
# Spotify's list rows: title + subtitle inside one clickable container. Naming
|
|
# the container keeps the tap on the row itself and off the row's buttons.
|
|
row_id: com.spotify.music:id/row_root
|
|
|
|
step_timeout: 20s
|
|
total_timeout: 150s
|
|
|
|
# Screens Artemis must never tap on. Each one fails the run with the reason, so
|
|
# a wrong tap is impossible (FR-8).
|
|
guard "Log in" => Spotify is signed out; sign in on the phone and retry
|
|
guard "Sign up free" => Spotify is signed out; sign in on the phone and retry
|
|
guard "Log in to Spotify" => Spotify is signed out; sign in on the phone and retry
|
|
guard "Continue with Facebook" => Spotify is showing its welcome screen; sign in on the phone and retry
|
|
guard "Continue with Google" => Spotify is showing its welcome screen; sign in on the phone and retry
|
|
guard "Update Spotify" => Spotify wants an update; update it on the phone and retry
|
|
guard "What's new" => Spotify is showing an announcement screen; dismiss it on the phone and retry
|
|
|
|
steps:
|
|
# 1. Make sure Spotify is up. Launching an app that is already open is a
|
|
# no-op, so this is safe to repeat.
|
|
- launch
|
|
- foreground 30s
|
|
- wait "Search" 30s
|
|
|
|
# 2. Open the search tab. Spotify remembers the last tab, so a search screen
|
|
# with the previous query can come back: clear that box only when the
|
|
# clear button is actually on screen.
|
|
- tap "Search"
|
|
- tap_if "Clear search query"
|
|
- wait "What do you want to listen to?" 30s
|
|
- tap "What do you want to listen to?"
|
|
|
|
# 3. Type the query. The clear button proves the text landed.
|
|
- type "{query}"
|
|
- wait "Clear search query" 30s
|
|
|
|
# 4. Wait for the results to replace the "Recents" list, so the next step can
|
|
# never match something from the history instead of a search result.
|
|
- wait_gone "Recents" 30s
|
|
|
|
# 5. Play the result that matches the query. tap_row scores every visible
|
|
# result row against the query words and taps the best one; equal matches
|
|
# go to the highest row, which is how Spotify ranks them.
|
|
- tap_row "{query}" 40s
|
|
|
|
# 6. Playback started when the transport button says "Pause". Exact match, so
|
|
# Spotify's "Paused" labels do not count.
|
|
- wait exact "Pause" 40s
|