End to End testing doesn't have to be slow and unreliable.

TestArmada is a fleet of tools for making cross-browser end-to-end testing fast, user-friendly, and valuable at scale, across large teams, without those annoying false positives.

Why TestArmada?

Built for Walmart Scale

Built at WalmartLabs to drive quality for the world's largest retailer, TestArmada is battle-tested, enterprise-grade, and ready to take on end-to-end testing for your site.

More Signal, Less Noise

TestArmada tells you everything you need to know, and nothing you don't. Notifications occur in real-time when tests fail, and a beautiful dashboard always shows the latest status for each suite.

Results You Can Trust

TestArmada won't waste your team's time or erode its trust with annoying false-positives. When failures occur, TestArmada intelligently retries the tests to smooth over common sources of "test flake".

Culture-Changing

With TestArmada, WalmartLabs has made end-to-end testing part of the shared culture between dev & QA. Both organizations collaborate to ensure quality at all levels development, staging, and production.

TestArmada's Components

Magellan

The heart of TestArmada, Magellan is a massively parallel test runner. By distributing tests across available CPU cores, Magellan blazes through long test suites in a fraction of the time, aggregating results in one friendly report.

Nightwatch-Extra

Nightwatch is a friendly NodeJS-based wrapper for Selenium, allowing developers to author tests in a way that's easy to learn and quick to iterate on. The Nightwatch-Extra adapter is the first of many adapters to come for bringing other webdriver wrappers into the TestArmada ecosystem.

Admiral

Like a tree falling in the woods, a test report that nobody reads doesn't make a sound. Admiral is a beautiful dashboard that makes it easy to check the latest cross-browser test results, and to spot trends and sources of failures.

Executor

Executor acts as a middle layer between magellan and test framework to drive test run (via framework) based on a specific need (differentiated by executing environments).

Reporter

Magellan can give you various test reports if configured with a proper reporter. There are already several reporters available in Testarmada to grab, however the simple API Testarmada exposes also allows to create a customized reporter in an easy way.

.getEl() tag [ browser ]

Returns a html element

Syntax

.getEl(selector, callback/*optional*/);

Parameters

selector :

css selector to identify the html element.

callback :

callback which includes the element information.

Usage

.getEl(".dropdown-link .user-name", function(element){
console.log(element); // will print out {'ELEMENT': 1}
});

.getEls() tag [ browser ]

Returns html elements

Syntax

.getEls(selector, callback/*optional*/);

Parameters

selector :

css selector to identify the html elements.

callback :

callback which includes the elements information.

Usage

.getEls(".dropdown-link .user-name", function(element){
console.log(element); // will print out [{'ELEMENT': 1}, .....]
});

.clickEl() tag [ browser ]

Click a html element

Syntax

.clickEl(selector, callback/*optional*/);

Parameters

selector :

css selector to the html element.

callback :

optional callback to be called when the command finishes.

Usage

.clickEl("#submit");

.clickAutomationEl() tag [ browser ]

Click an html element which has html attribute [data-automation-id].

Syntax

.clickAutomationEl(id, callback/*optional*/);

Parameters

id :

value of data-automation-id attribute.

callback :

optional callback to be called when the command finishes.

Usage

.clickAutomationEl("placeOrder"); // equals to .clickEl('[data-automation-id="placeOrder"]');

.getElValue() tag [ browser ]

Returns the textual value of a html element

Syntax

.getElValue(selector, callback/*optional*/);

Parameters

selector :

css selector to the html element.

callback :

callback which includes the value of the element.

Usage

.getEl(".user-profile", function(profile){ });

.setElValue() tag [ browser ]

Sets value to a html element.

Syntax

.setElValue(selector, value, callback/*optional*/);

Parameters

selector :

css selector to the html element.

value :

value to be set to the html element.

callback :

optional callback to be called when the command finishes.

Usage

.setElValue("#username", "fake@login.com");

.setMaskedElValue() tag [ browser ]

Sets value to a masked html element like credit card number or phone number.

Syntax

.setMaskedElValue(selector, value, callback/*optional*/);

Parameters

selector :

css selector to the html element.

value :

value to be set to the html element.

callback :

optional callback to be called when the command finishes.

Usage

.setElValue(".phone-number", "123456789");

.moveToEl() tag [ browser ]

Moves cursor to a html element

Syntax

.moveToEl(selector, xoffset, yoffset, callback/*optional*/);

Parameters

selector :

css selector to the html element.

xoffset :

x offset to move to, relative to the top-left corner of the element.

yoffset :

y offset to move to, relative to the top-left corner of the element.

callback :

optional callback to be called when the command finishes.

Usage

.moveToEl(".checkout", 10, 10);

.takeElScreenshot() tag [ browser ]

Takes screenshot for a html element and save it to file

Syntax

.takeElScreenshot(selector, filename, callback/*optional*/);

Parameters

selector :

css selector to the html element.

filename :

file name where the screen shot will be saved to (.png will be appended as prefix).

callback :

optional callback to be called when the command finishes.

Usage

.takeElScreenshot(".phone-number", "phone-number");

.takeScreenhot() tag [ browser ]

Takes screenshot for the page.

Syntax

.takeScreenhot(filename, callback/*optional*/);

Parameters

filename :

file name where the screen shot will be saved to (.png will be appended as prefix).

callback :

optional callback to be called when the command finishes.

Usage

.takeScreenhot("home-page");

.assert.elContainsText() tag [ browser ]

Asserts if current element contains a given text

Syntax

.assert.elContainsText(selector, value);

Parameters

selector :

css selector to the html element.

value :

textual value or regular expression to assert.

Usage

.assert.elContainsText(".username", "testarmada");

.assert.elNotContainsText() tag [ browser ]

Asserts if current element doesn't contain a given text

Syntax

.assert.elNotContainsText(selector, value);

Parameters

selector :

css selector to the html element.

value :

textual value or regular expression to assert.

Usage

.assert.elNotContainsText(".username", "testarmada");

.assert.selectorHasLength() tag [ browser ]

Asserts if current selector returns given amount of elements

Syntax

.assert.selectorHasLength(selector, value);

Parameters

selector :

css selector to the html element.

value :

numeric value to assert.

Usage

.assert.selectorHasLength(".username", 1);

.assert.elValueContains() tag [ browser ]

Asserts if current element contains the given value

Syntax

.assert.elValueContains(selector, value);

Parameters

selector :

css selector to the html element.

value :

textual value to assert.

Usage

.assert.selectorHasLength(".username", 1);

.assert.elLengthGreaterThan() tag [ browser ]

Asserts if the length of an element's attribute is greater than a number

Syntax

.assert.elLengthGreaterThan(selector, using, value);

Parameters

selector :

css selector to the html element.

using :

element attribute, can be chosen from ["value", "text", "html", "length"].

value :

numeric value to assert.

Usage

.assert.elLengthGreaterThan(".username", "text", 1);

.getMobileEl() tag [ iOS Android ]

Returns a mobile element

Syntax

.getMobileEl(using, selector, callback/*optional*/);

Parameters

using :

type (accessibility id, id or xpath) of the selector being used.

selector :

selector to identify the element.

callback :

callback which includes the element information.

Usage

.getMobileEl("accessibility id", "mybutton", function(element){
console.log(element); // will print out {'ELEMENT': 1}
});

.clickMobileEl() tag [ iOS Android ]

Clicks a mobile element

Syntax

.clickMobileEl(using, selector, callback/*optional*/);

Parameters

using :

type (accessibility id, id or xpath) of the selector being used.

selector :

selector to identify the element.

callback :

optional callback to be called when the command finishes.

Usage

.clickMobileEl("accessibility id", "checkout");

.setMobileElValue() tag [ iOS Android ]

Sets value to a mobile element.

Syntax

.setMobileElValue(using, selector, value, callback/*optional*/);

Parameters

using :

type (accessibility id, id or xpath) of the selector being used.

selector :

selector to identify the element.

value :

value to be set to the element.

callback :

optional callback to be called when the command finishes.

Usage

.setMobileElValue("accessibility id", "username", "testarmada");

.getMobileElValue() tag [ iOS Android ]

Returns textual value from a mobile element.

Syntax

.getMobileElValue(using, selector, callback/*optional*/);

Parameters

using :

type (accessibility id, id or xpath) of the selector being used.

selector :

selector to identify the element.

callback :

callback which includes the element information.

Usage

.getMobileElValue("accessibility id", "username", function(value){
console.log(value);
});

.swipeMobileElTo() tag [ iOS Android ]

Swipes a mobile element to a coordinate measured by vector (x, y).

Syntax

.swipeMobileElTo(using, selector, x, y, callback/*optional*/);

Parameters

using :

type (accessibility id, id or xpath) of the selector being used.

selector :

selector to identify the element.

x :

distance on x axis from element to where to swipe to.

y :

distance on y axis from element to where to swipe to.

callback :

optional callback to be called when the command finishes.

Usage

.swipeMobileElTo("accessibility id", "price", 0, -100);

.swipeScreenTo() tag [ iOS Android ]

Swipes screen from the given coordinate (fx,fy) to a coordinate measured by vector (tx, ty)

Syntax

.swipeScreenTo(fx, fy, tx, ty, callback/*optional*/);

Parameters

fx :

x coordinate of the element to swipe from.

fy :

y coordinate of the element to swipe from.

tx :

distance on x axis from element to where to swipe to.

ty :

distance on y axis from element to where to swipe to.

callback :

callback which includes the element information.

Usage

.swipeScreenTo(30, 400, 0, -100);

.hideKeyboard() tag [ Android ]

Dismisses the software keyboard.

Syntax

.hideKeyboard(callback/*optional*/);

Parameters

callback :

optional callback to be called when the command finishes.

Usage

.hideKeyboard();

.pressKeycode() tag [ Android ]

Sends a keycode to android emulator.

Syntax

.pressKeycode(keycode, callback/*optional*/);

Parameters

keycode :

keycode to be sent.

callback :

optional callback to be called when the command finishes.

Usage

.pressKeycode(4);

.tapMobileEl() tag [ iOS Android ]

Taps a coordinate (x, y) on device's screen.

Syntax

.tapMobileEl(x, y, callback/*optional*/);

Parameters

x :

x coordinate to tap

y :

y coordinate to tap

callback :

optional callback to be called when the command finishes.

Usage

.tapMobileEl(300, 120);

.assert.mobileElAttrContains() tag [ iOS Android ]

Asserts if the attribute of current element contains the given value

Syntax

.assert.mobileElAttrContains(using, selector, attr, value);

Parameters

using :

type (accessibility id, id or xpath) of the selector being used.

selector :

selector to identify the element.

attr :

attribute of the element.

value :

textual value or regular expression to assert.

Usage

.assert.mobileElAttrContains("accessibility id", "username", "name", "Testarmada");

Top