Roku JavaScript Library
Roku's JavaScript Library enables keyword-driven testing of apps. The library resides in a JavaScript 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 JavaScript Library, provide the following three arguments:
The following example demonstrates how to instantiate the Roku JavaScript Library:
library = new rokuLibrary.Library("192.168.2.121", 20000, 2000);
The following example demonstrates how to instantiate the Roku JavaScript Library and runs test case with Mocha and Chai:
//import library
const rokuLibrary = require("../library/rokuLibrary");
const expect = require("chai").expect;
const {
spawn
} = require('child_process');
//start instance of webDriver
const childProcess = spawn('D:/projects/go/webDriver/src/main.exe');
let library;
//test suite
describe('test_3-Grid', () => {
//this method is executed before all test cases
before(() => {
//create instance of jsLibrary
library = new rokuLibrary.Library("192.168.2.121", 20000, 2000);
});
//test case
it('should launch the app', async function() {
this.timeout(25000);
await library.sideLoad("../channels/3_Grid.zip", "rokudev", "your_channel_password");
await library.verifyIsChannelLoaded('dev');
});
//this method executed after all tests
after(async () => {
//close session
await library.close();
//exit webDriver
childProcess.kill();
});
});
Keywords
The Roku's JavaScript 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 (available since release 2.0)
- Get timer (available since release 2.0)
- Verify is playback started
- Verify is screen loaded
- 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 is channel exist
- 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)
launchTheChannel
(available since release 2.0)
getApps
sendKey
sendKeys
sendWord
markTimer
(available since release 2.0)
getTimer
(available since release 2.0)
verifyIsPlaybackStarted
verifyIsScreenLoaded
getChildNodes
-
locator (optional): An array containing search criteria for the child nodes to be retrieved. The locator has the following syntax:
"using" ("attr", "tag", "text") : specify locator type
"value": tag or attribute value
"attribute"(only for "attr" type): specify attribute
getElement
getElements
getFocusedElement
verifyIsChannelLoaded
###getCurrentChannelInfo
getDeviceInfo
getPlayerInfo
verifyIsChannelExist
setTimeout
setDelay
getAttribute
Sample test cases
The Roku automated app testing repository includes a set of sample JavaScript 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.js), 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 test_basic.js sample demonstrates how to create a simple test case that checks whether a user is authenticated before playing content using the Roku JavaScript Library:
const rokuLibrary = require("../library/rokuLibrary");
const expect = require("chai").expect;
const {
spawn
} = require('child_process');
const childProcess = spawn('D:/projects/go/webDriver/src/main.exe');
let library;
describe('App should be launched', () => {
before(() => {
library = newrokuLibrary.Library("192.168.1.64");
});
it('Check if app exists on the device', asyncfunction() {
this.timeout(5000);
const apps = await library.getApps();
const res = library.verifyIsChannelExist(apps, 'dev');
expect(res).equal(true);
});
it('should launch the app', asyncfunction() {
this.timeout(5000);
await library.launchTheChannel('dev');
await library.verifyIsChannelLoaded('dev');
});
after(async () => {
await library.close();
childProcess.kill();
});
});
Viewing the test case report and log
After you run a test case that uses the Roku JavaScript 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.