Roku Robot Framework Library
Roku's Robot Framework Library enables keyword-driven testing of apps. The library resides in a Python class that has methods that map directly to keyword names. The keywords take the same arguments as the methods implementing them. The keywords report failures with exceptions, create logs by writing to standard output, and return values using the return statement.
Instantiating the library
To create an instance of the Roku Framework Robot Library, provide the following four arguments:
| Argument | Description |
|---|---|
| ip | The IP address of the device to be used for testing. |
| path | The path to the Roku WebDriver. |
| timeout | The amount of time (in milliseconds) that commands are allowed to run. |
| pressDelay | The amount of time (in milliseconds) between keypress commands. This argument works with the Send keys command. |
The following example demonstrates how to instantiate the Roku Robot Framework Library:
*** Settings ***
Library ./../Library/RobotLibrary.py ${ip_address} ${timeout} ${pressDelay} ${server_path}
*** Variables ***
${ip_address} 127.0.0.1
${server_path} D:/path/to/webDriver/main.exe
${timeout} 20000
${pressDelay} 2000
.py file:
class RobotLibrary:
def __init__(self, ip, timeout = 0, pressDelay = 0, path = ""):
<some code>
Keywords
The Roku's Robot Framework Library includes the following keywords:
- Sideload (available since release 2.0)
- Launch the app
- Input deep linking data (available since release 2.0)
- Get apps
- Send key
- Send keys
- Send word
- Mark timer
- Get timer
- Verify is playback started (available since release 2.0)
- Verify is screen loaded (available since release 2.0)
- Get child nodes (available since release 2.1)
- Get element
- Get elements
- Get focused element
- Verify is app loaded
- Get current app info
- Get device info
- Get player info
- Verify app exists
- Set timeout
- Set press delay
- Get attribute
A keyword will fail if its respective WebDriver endpoint returns a 4xx or 500 error.
Sideload
(available since release 2.0)
Keyword | Argument | Description | Example |
|---|---|---|---|
Sideload |
| Sideloads an app that has been packaged into a zip file. |
|
Launch the app
Keyword | Argument | Description | Example |
|---|---|---|---|
Launch the app |
| Launches the app corresponding to the specified channel ID. |
|
Input deep linking data
(available since release 2.0)
Keyword | Argument | Description | Example |
|---|---|---|---|
Input deep linking data |
| Launches the app corresponding to the specified app ID. |
|
Get apps
Keyword | Description | Example |
|---|---|---|
Get apps | Returns a list of installed apps as an array of objects. Each app object contains the following fields:
|
|
Send key
Keyword | Arguments | Description | Example |
|---|---|---|---|
Send key |
| Simulates the press and release of the specified key. |
|
Send keys
Keyword | Arguments | Description | Example |
|---|---|---|---|
Send keys |
| Simulates the sequence of keypresses and releases. | |
Send word
Keyword | Arguments | Description | Example |
|---|---|---|---|
Send word |
| Simulates the press and release of each letter in a word. |
|
Mark timer
(available since release 2.0)
| Keyword | Description | Example |
|---|---|---|
| Mark timer | Starts the timer. | Mark timer |
Get timer
(available since release 2.0)
| Keyword | Description | Example |
|---|---|---|
| Get timer | Returns the number of milliseconds elapsed since the timer was last started. | ${time} = Get timer |
Verify is playback started
Keyword | Arguments | Description | Example |
|---|---|---|---|
Verify is playback started |
| Verify playback has started on the Roku media player. |
|
Verify is screen loaded
Keyword | Arguments | Description | Exa |
|---|---|---|---|
Verify is screen loaded |
| Verify that the screen is loaded based on the provided element data. | |
Get child nodes
Keyword | Arguments | Description | Example |
|---|---|---|---|
Get child nodes |
| Retrieves the child component of the specified node. | |
Get element
Keyword | Arguments | Description | Example |
|---|---|---|---|
Get element |
| Searches for an element on the page based on the specified locator starting from the screen root. Returns information on the first matching element. | |
Get elements
Keyword | Arguments | Description | Example |
|---|---|---|---|
Get elements |
| Searches for elements on the page based on the specified locators starting from the screen root. Returns information on the matching elements. | |
Get focused element
| Keyword | Description | Example |
|---|---|---|
| Get focused element | Return the element on the screen that currently has focus. See the WebDriver active element command for more information. | &{element}= Get focused element |
Verify is channel loaded
Keyword | Arguments | Description | Example |
|---|---|---|---|
Verify is channel loaded |
| Verify that the specified app has been launched. |
|
Get current channel info
Keyword | Description | Example | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Get current channel info | Returns an object containing information about the app currently loaded. This object has the following fields:
|
|
Get device info
Keyword | Description | Example |
|---|---|---|
Get device info | Returns an object containing the information about the device. This object has the following fields: |
|
Get player info
Keyword | Description | Example | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Get player info | Returns an object containing information about the Roku media player. This object has the following fields:
|
|
Verify is channel exist
Keyword | Arguments | Description | Example |
|---|---|---|---|
Verify is channel exist |
| Verifies the specified app is installed on the device. This keyword fails if the apps array does not contain the app specified in the id argument. | |
Set timeout
Keyword | Arguments | Description | Example |
|---|---|---|---|
Set timeout |
| Sets the timeout for Web driver client requests. |
|
Set press delay
Keyword | Arguments | Description | Example |
|---|---|---|---|
Set press delay |
| Sets the delay between key presses. This keyword works with the Send keys keyword. |
|
Get attribute
Keyword | Arguments | Description | Example |
|---|---|---|---|
Get attribute |
| Get attribute value. This keyword fails if an element does not contain the specified attribute. | |
Sample test cases
The Roku automated app testing repository includes a set of sample Robot Framework test cases that can be executed on their corresponding SceneGraph Developer Extensions (SGDEX) sample apps. For example, you can execute the SGDEX GridView test case (test_3_Grid.robot), which will sideload the corresponding sample app (3_Grid) on your device, and then view the test output. You can reference these samples when developing test scripts for the automated testing of your development apps.
Before running a sample test case, you need to update the sideload command in the test case with the Roku device password.
The Basic_tests.robot sample demonstrates how to create a simple test case that checks whether a user is authenticated before playing content using the Roku Robot Framework Library:
*** Settings ***
Documentation Basic smoke tests
Variables ./../Library/variables.py
Library ./../Library/RobotLibrary.py ${ip_address} ${timeout} ${pressDelay} ${server_path}
Library Collections
*** Variables ***
${channel_code} dev
&{DATA2}= using=text value=Barack Gates, Bill Obama
@{DATA2Array}= &{DATA2}
&{Params2}= elementData=${DATA2Array}
&{DATA3}= using=text value=Please enter your username
@{DATA3Array}= &{DATA3}
&{Params3}= elementData=${DATA3Array}
&{DATA4}= using=text value=Please enter your password
@{DATA4Array}= &{DATA4}
&{Params4}= elementData=${DATA4Array}
@{KEYS}= down down down down select
&{DATA5}= using=text value=Authenticate to watch
@{DATA5Array}= &{DATA5}
&{Params5}= elementData=${DATA5Array}
*** Test Cases ***
Channel should be launched
Side load ../sample/channel.zip rokudev aaaa
Verify is channel loaded ${channel_code}
Check if details screen showed
Send key select 4
Verify is screen loaded ${Params2}
Check if playback started
${status} ${value}= Run Keyword And Ignore Error Verify is screen loaded ${Params5} 2
Run keyword if "${status}"=="PASS" Do auth
... ELSE Send key select
Verify is playback started 20 2
*** Keywords ***
Do auth
Send key select
Verify is screen loaded ${Params3}
Send word user
Send keys ${KEYS}
Verify is screen loaded ${Params4}
Send word pass
Send keys ${KEYS}
Viewing the test case report and log
After you run a test case that uses the Roku Robot Framework Library, you can view the generated report and log files in the specified output directory. The report summarizes the test case and provides statistics on the percentage of individual tests that passed/failed. The log details the success/failure of the individual keywords used in each test case.

Updated 3 months ago
