# 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