Roku test automation has always meant code and a box on your desk. Roku’s own WebDriver runs a local server that drives a Roku on your network, with tests written for Robot Framework or JavaScript. The Appium Roku driver needs a Roku in developer mode reachable from your Appium server and finds elements by XPath. The community’s Roku Test Automation library goes deeper, but it asks you to add an on-device component to your channel and write your tests in TypeScript. All of them assume someone owns, wires and babysits the Roku the tests run on.
VibeView takes the opposite end: the Roku is ours, the test is a recording, and the run happens in the cloud.
The options compared
| How you write a test | The Roku | Finding elements | When the layout changes | |
|---|---|---|---|---|
| Roku WebDriver | Robot Framework or JavaScript | Yours, on your network, in developer mode | Checks for SceneGraph components on screen | You update the test |
| Appium Roku driver | Appium test code | Yours, reachable from the Appium server | XPath only | You update the selectors |
| Roku Test Automation | TypeScript, plus a component added to your channel | Yours, on your network | Node fields and focus, through the added component | You update the test |
| VibeView | Record it with the remote, or describe it in plain English | A physical Roku in the cloud, streamed to your browser | The focused element of each recorded press | Replay walks to the element; Smart hands a changed step to AI |
The code-first tools still make sense when you want full programmatic control and already run a device lab. If you want your QA team, or your coding agent, to produce tests that survive the next design change without anyone maintaining a Roku, the rest of this guide is for you.
1. Record the flow
Upload your channel’s sideload .zip under Apps and start a session from it. In the panel beside the device, open the Recorder tab and click Record. Then use the channel the way a viewer would: arrow keys for the d-pad, Enter to select, Esc to go back, and plain typing for on-screen keyboards. Each press appears in the panel as you go.
Each press is stored with the element that had focus when you pressed it: the tile, the menu item, the button. That is what makes the recording more than a list of keys.
When you are done, stop the recording and click Generate with AI. It writes a plain-language step for each thing you did (“Open the Movies row”, “Select The Beekeeper”), which you save as a test. Add Verify steps for what should be true at the end, such as “Verify the detail screen shows the Play button”.
2. What replay does on a Roku
On replay, a step does not just press the same keys. It walks focus to the element you pressed, checking where focus actually landed after each move, and only then continues. So a recording made when “The Beekeeper” was the third tile still finds it when it becomes the fifth.
Some channels draw their own highlight without telling the device which item is selected. On those screens there is no element to walk to, so replay presses the recorded keys in order and marks the step as replayed by key presses. Smart runs still check the screen after every step, so a positional step that lands somewhere unexpected is caught rather than passed.
To make those screens replay by element too, build your test builds with the VibeView Roku plugin, a BrighterScript plugin that lets VibeView see your channel’s own highlight and gives each item a stable id. Steps then name the item you pressed, including poster-only tiles with no visible text, and replay finds it wherever it moves. It only changes the builds you make for testing; store builds are untouched.
You choose how much AI each run uses:
- Smart (the default) replays each step and hands a step that no longer matches to the AI agent (beta), which looks at the screen and carries on.
- No AI only replays; a step that no longer matches fails.
- AI only ignores the recording and runs the plain-language steps with the agent.
You can also skip recording entirely and write a test in plain English, such as “open Search, type comedy, open the first result, verify the Play button is shown”, and run it with AI only.
3. Reset between cases
A Roku keeps a channel’s saved data, such as a signed-in account and saved settings, for as long as the channel is installed. A group’s start state decides how each test starts: Restart the app restarts the channel and keeps that data, while Clean app data and Fresh install remove the channel and install it again, which takes a few seconds and gives every test a first-launch state.
4. Run it from CI
Roku channels have no build step on VibeView: your CI job packages the zip, uploads it, and runs the groups you tagged against that exact build.
BUILD_ID=$(vibeview upload-app ./out/channel.zip --output json | jq -er '.build_id')
vibeview run-suites --tag smoke --platform roku --build "$BUILD_ID" --commit-sha "$GIT_SHA"
Connect GitHub under Settings → Integrations and each group’s result shows up as a check on the pull request. Each step keeps a screenshot, and the screenshot check (on by default for new groups) compares every step with its baseline, catching a visual change, such as a missing element or a moved highlight, even when the flow itself still passes.
5. Let your coding agent write the tests
If an agent is building the channel, it can verify each change on the Roku as it goes. Once the change works, the same flow can be recorded as a test, so the check outlives the conversation. How to let Claude Code test your Roku channel covers the setup.
Limits worth knowing
- AI steps are in beta. No AI runs need no AI at all; Smart and AI only runs use it where the recording can’t carry the step.
- Custom highlights replay by key presses unless the channel is built with the Roku plugin. Without it, steps on those screens replay positionally and say so.
- The Roku is physical. Sessions wait their turn when every Roku is busy, so a large Roku group takes longer to start than one on iOS or Android simulators.
Frequently asked questions
Do I need my own Roku for automated tests? No. Tests record and run on physical Roku devices that VibeView hosts and streams to your browser and to CI.
Do I have to write code? No. Record the flow with the remote, or describe it in plain English. The CLI is only needed to run tests from CI.
What happens when a row gets a new item? Replay walks focus to the element you recorded, wherever it now sits. If the element is gone or renamed, a Smart run hands that step to the AI agent.
Can I run Roku tests in GitHub Actions?
Yes. Package and upload the channel, then run vibeview run-suites --platform roku with the build id; results can post as GitHub checks.
Does it test video playback? Tests drive the channel and check what is on screen after each step; they don’t measure playback quality. Because the Roku is physical, you can watch playback live on the Devices page while you build the test.