Features

Dark Mode testing with Appium

Dark mode is a setting, available on both Android and iOS, which toggles the interface appearance of the phone to use either the standard light mode setting or a dark mode.

When dark mode is enabled, the phone will switch to a dark background with lighter foreground colors, which enables better viewing in low-light conditions.

Changing Dark Mode

This example will use mobile: setAppearance to set the appearance to dark (dark mode).


var wd = require('wd');
var assert = require('assert');
var asserters = wd.asserters;
var testingbotKey = "api_key",
testingbotSecret = "api_secret";

desiredCaps = {
  'name': 'My First App Test',
  'deviceName' : 'Galaxy S8',
  'platformName': 'Android',
  'version': '9.0',
  'app' : 'https://testingbot.com/appium/sample.apk',
  'realDevice': true
};
driver = wd.promiseRemote("http://" + testingbotKey + ":" + testingbotSecret + "@hub.testingbot.com/wd/hub");

driver
  .init(desiredCaps)
  .then(function () {
    return driver.execute('mobile: setAppearance', [{ 'style': 'dark' }]);
  })
  .then(function () {
    return driver.waitForElementByAccessibilityId('inputA', asserters.isDisplayed && asserters.isEnabled, 30000);
  })
  .then(function (inputA) {
    return inputA.sendKeys("10");
  })
  .then(function () {
    return driver.waitForElementByAccessibilityId('inputB', asserters.isDisplayed && asserters.isEnabled, 30000);
  })
  .then(function (inputB) {
    return inputB.sendKeys("5");
  })
  .then(function () {
    return driver.waitForElementByAccessibilityId('sum', asserters.isDisplayed && asserters.isEnabled, 30000);
  })
  .then(function (textOutput) {
    return textOutput.text().then(function(value) {
      if (value === "15")
        assert(true);
      else
        assert(false);
    });
  })
  .fin(function() { return driver.quit(); })
  .done();

Make sure to always stop your test (.done()), otherwise it will continue running, leading to a timeout.

var wd = require('wd');
var assert = require('assert');
var asserters = wd.asserters;
var testingbotKey = "api_key",
testingbotSecret = "api_secret";

desiredCaps = {
  'name': 'My First App Test',
  'deviceName' : 'iPhone XR',
  'platformName': 'iOS',
  'version': '16.0',
  'app' : 'https://testingbot.com/appium/sample.ipa',
  'realDevice': true
};
driver = wd.promiseRemote("http://" + testingbotKey + ":" + testingbotSecret + "@hub.testingbot.com/wd/hub");

driver
  .init(desiredCaps)
  .then(function () {
    return driver.execute('mobile: setAppearance', [{ 'style': 'dark' }]);
  })
  .then(function () {
    return driver.waitForElementByAccessibilityId('inputA', asserters.isDisplayed && asserters.isEnabled, 30000);
  })
  .then(function (inputA) {
    return inputA.sendKeys("10");
  })
  .then(function () {
    return driver.waitForElementByAccessibilityId('inputB', asserters.isDisplayed && asserters.isEnabled, 30000);
  })
  .then(function (inputB) {
    return inputB.sendKeys("5");
  })
  .fin(function() { return driver.quit(); })
  .done();

Make sure to always stop your test (.done()), otherwise it will continue running, leading to a timeout.