Adjusting Network Connection
The Selenium Mobile JSON Wire Protocol Specification supports an API for getting and setting the network connection for a device. The API works through a bitmask, assigning an integer to each possible state:
| Value (Alias) | Data | Wifi | Airplane Mode | 
|---|---|---|---|
| 0 (None) | 0 | 0 | 0 | 
| 1 (Airplane Mode) | 0 | 0 | 1 | 
| 2 (Wifi only) | 0 | 1 | 0 | 
| 4 (Data only) | 1 | 0 | 0 | 
| 6 (All network on) | 1 | 1 | 0 | 
iOS
Unfortunately, at the moment Appium does not support the Selenium network connection API for iOS.
Android
There are the following limitations:
Real Devices
- Changing Airplane Mode state only works for Android 6 and older
 - Chaning data connection state works for Android 4.4 and older. Newer OS releases (5.0+) must be rooted in order to make the feature working (e. g. su binary should available)
 - Changing Wi-Fi connection state should work for all Android versions
 
Emulators
- Changing Airplane Mode state only works for Android 6 and older
 - Chaning data connection state should work for all Android versions
 - Changing Wi-Fi connection state should work for all Android versions
 
Windows
Unfortunately, at the moment Appium does not support the Selenium network connection API for Windows.
// javascript
// set airplane mode
driver.setNetworkConnection(1)
// set wifi only
driver.setNetworkConnection(2)
// set data only
driver.setNetworkConnection(4)
// set wifi and data
driver.setNetworkConnection(6)
Retrieving the network connection settings returns the same bitmask, from which the status can be decoded.
// javascript
driver.getNetworkConnection().then(function (connectionType) {
  switch (connectionType) {
    case 0:
      // no network connection
      break;
    case 1:
      // airplane mode
      break;
    case 2:
      // wifi
      break;
    case 4:
      // data
      break;
    case 6:
      // wifi and data
      break;
  }
});