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*/);

Usage

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

.moveToEl() tag [ browser ]

Moves cursor to a html element

Syntax

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

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*/);

Usage

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

.takeScreenhot() tag [ browser ]

Takes screenshot for the page.

Syntax

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

Usage

.takeScreenhot("home-page");

.assert.elContainsText() tag [ browser ]

Asserts if current element contains a given text

Syntax

.assert.elContainsText(selector, value or regexp);

Usage

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

.assert.elNotContainsText() tag [ browser ]

Asserts if current element doesn't contain a given text

Syntax

.assert.elNotContainsText(selector, value or regexp);

Usage

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

.getMobileEl() tag [ iOS Android ]

Returns a mobile element

Syntax

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

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*/);

Usage

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

.setMobileElValue() tag [ iOS Android ]

Sets value to a mobile element.

Syntax

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

Usage

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

.getMobileElValue() tag [ iOS Android ]

Returns textual value from a mobile element.

Syntax

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

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*/);

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*/);

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.

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 [ Android ]

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

Syntax

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

Parameters

x :

x coordinate

y :

y coordinate

callback :

optional callback to be called when the command finishes.

Usage

.tapMobileEl(300, 120);

Top