How do I prevent the iOS simulator from restarting after each test case?

I know this topic has been covered several times, but I haven’t found an answer.

The simulator restarts and re-installs the app for each test that my script runs. I’ve tried using noReset and fullReset a million times and it doesn’t make any difference.

What I need is:

  1. The simulator starts and the app is installed.
  2. The app is launched and the test is executed.
  3. The app is closed and completely reset.
  4. The app is re-launched, next test is executed, and so on.

At the VERY least, the app can be re-installed after the test ends. Re-launching the simulator is very time consuming! I don’t see why this is so difficult to accomplish. I’ve looked everywhere for a solution.

current setup:

self.driver = webdriver.Remote(
                'app': os.path.abspath('applicationtotest/'),
                'platformName': 'iOS',
                'platformVersion': '10.3',
                'deviceName': 'iPhone 6s',
                'newCommandTimeout': "7200",
                'locationServicesEnabled': True,
                'automationName': 'XCUITest',
                'fullReset': False,

Anybody have an update on this?

noReset = true is enough.

Use true/false instead of True/False

1 Like

True is capitalized in Python, true causes a syntax error

Sorry about that. Then just using ‘noReset’: True can you post the logs in a gist link?

Sending the Gist to you in a private message :slight_smile:

i am using noReset: true and it works in my case.

iOSClient: {
            port: 4723,
                desiredCapabilities: {
                    platformName: "iOS",
                    platformVersion: "11.2",
                    deviceName: "iPad Pro (9.7-inch)",
                    app: "path/to/app/*.app",
                    automationName: "XCUITest",
                    autoWebview: true,
                    noReset: true

can you post a log or send in msg?

Any news on that? I have the same issue and noReset seems not to work for me. I am using wdio+appium

@george_romanas try: use resetOnSessionStartOnly

@Aleksei Thank you very much for the quick response. Still no luck with resetOnSessionStartOnly.

My config file is:

const chai = require(‘chai’);

exports.config = {

specs: [

exclude: [
maxInstances: 1,
services: ['appium'],
port: 4723,

capabilities: [{
    maxInstances: 1,
    appiumVersion: '1.9.1',
    platformName: 'ios',
    platformVersion: '12.1',
    deviceName: 'iPhone X',
    unicodeKeyboard: true,
    automationName: 'XCUITest',
    app: 'ios/build/Build/Products/Debug-iphonesimulator/',
    noReset: true,
    resetOnSessionStartOnly: false

sync: true,
logLevel: 'verbose',

coloredLogs: true,

deprecationWarnings: true,

bail: 0,

screenshotPath: './errorShots/',

baseUrl: 'http://localhost',

waitforTimeout: 10000,

connectionRetryTimeout: 90000,

connectionRetryCount: 3,

framework: 'cucumber',

reporters: ['dot', 'cucumber'],

cucumberOpts: {
    require: [

    ],        // <string[]> (file/dir) require files before executing features
    backtrace: false,   // <boolean> show full backtrace for errors
    compiler: [],       // <string[]> ("extension:module") require files with the given EXTENSION after requiring MODULE (repeatable)
    dryRun: false,      // <boolean> invoke formatters without executing steps
    failFast: false,    // <boolean> abort the run on first failure
    format: ['pretty'], // <string[]> (type[:path]) specify the output format, optionally supply PATH to redirect formatter output (repeatable)
    colors: true,       // <boolean> disable colors in formatter output
    snippets: true,     // <boolean> hide step definition snippets for pending steps
    source: true,       // <boolean> hide source uris
    profile: [],        // <string[]> (name) specify the profile to use
    strict: false,      // <boolean> fail if there are any undefined or pending steps
    tags: [],           // <string[]> (expression) only execute the features or scenarios with tags matching the expression
    timeout: 20000,     // <number> timeout for step definitions
    ignoreUndefinedDefinitions: true ,// <boolean> Enable this config to treat undefined definitions as warnings.
    defaultTimeoutInterval: 10000

before: function () {
  global.expect = chai.expect;
  global.assert = chai.assert;
  global.should = chai.should();


@george_romanas also add for sure:

capabilities.setCapability(MobileCapabilityType.FULL_RESET, false);

just in JS :slight_smile: