Detox: iOS: Earlgrey error after running the same `it()` test twice

Created on 22 Nov 2017  ·  1Comment  ·  Source: wix/Detox

Description

Running the same test twice makes the second fail.

Steps to Reproduce

This test passes:

describe('Login', () => {
  beforeEach(async () => {
    await device.reloadReactNative();
  });

  it('should not login', async () => {
    await waitFor(element(by.id('welcome')))
      .toBeVisible()
      .withTimeout(5000);

    await element(by.id('EmailField')).clearText();
    await element(by.id('EmailField')).typeText('wronggmail.com');
    await element(by.id('PasswordField')).clearText();
    await element(by.id('PasswordField')).typeText('wrongpass');

    await element(by.id('LoginButton')).tap();

    await waitFor(element(by.id('Home')))
      .toBeNotVisible()
      .withTimeout(10000);
  });
});

This fails:

describe('Login', () => {
  beforeEach(async () => {
    await device.reloadReactNative();
  });

  it('should not login', async () => {
    await waitFor(element(by.id('welcome')))
      .toBeVisible()
      .withTimeout(5000);

    await element(by.id('EmailField')).clearText();
    await element(by.id('EmailField')).typeText('wronggmail.com');
    await element(by.id('PasswordField')).clearText();
    await element(by.id('PasswordField')).typeText('wrongpass');

    await element(by.id('LoginButton')).tap();

    await waitFor(element(by.id('Home')))
      .toBeNotVisible()
      .withTimeout(10000);
  });

  it('should not login', async () => {
    await waitFor(element(by.id('welcome')))
      .toBeVisible()
      .withTimeout(5000);

    await element(by.id('EmailField')).clearText();
    await element(by.id('EmailField')).typeText('wronggmail.com');
    await element(by.id('PasswordField')).clearText();
    await element(by.id('PasswordField')).typeText('wrongpass');

    await element(by.id('LoginButton')).tap();

    await waitFor(element(by.id('Home')))
      .toBeNotVisible()
      .withTimeout(10000);
  });
});

Detox, Node, Device, Xcode and macOS Versions

$ yarn list --depth=0 | grep 'detox@\| jest@'
├─ [email protected]
├─ [email protected]

$ node --version
v8.9.0

$ xcodebuild -version
Xcode 9.1
Build version 9B55

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.6
  • Device: iPhone 6 iOS 11.1 (simulator)

Device and verbose Detox logs

$ npm run test-e2e

> [email protected] test-e2e /Users/gianfranco/temp/myRN
> jest e2e --setupTestFrameworkScriptFile=./e2e/init.js --bail

 server listening on localhost:51830...
 : Searching for device matching iPhone 6...
 : Uninstalling com.onova.app...
 : com.onova.app uninstalled
 : Installing /Users/gianfranco/temp/myRN/ios/build/Build/Products/Debug-iphonesimulator/myRN.app...
 : /Users/gianfranco/temp/myRN/ios/build/Build/Products/Debug-iphonesimulator/myRN.app installed
 : Terminating com.onova.app...
 : com.onova.app terminated
 : Launching com.onova.app...
6: com.onova.app launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F $HOME/Library/Developer/CoreSimulator/Devices/C8A0B6F9-5751-4C97-8069-0288C7F928B8/data/tmp/detox.last_launch_app_log.{out,err}
 FAIL  e2e/Login.spec.js (15.641s)
  Login
    ✓ should not login (7616ms)
    ✕ should not login (1639ms)

  ● Login › should not login

    Error: An action failed. Please refer to the error trace below.
    Exception with Action: {
      "Action Name" : "Clear text",
      "Element Matcher" : "(((respondsToSelector(accessibilityIdentifier) && accessibilityID('EmailField')) && !(kindOfClass('RCTScrollView'))) || (kindOfClass('UIScrollView') && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && ancestorThatMatches(((respondsToSelector(accessibilityIdentifier) && accessibilityID('EmailField')) && kindOfClass('RCTScrollView'))))))"
    }

    Error Trace: [
      {
        "Description" : "First responder [F] of element [E] does not conform to UITextInput protocol.",
        "Description Glossary" :     {
          "F" : "<RCTRootView: 0x7fd5b7c13d90; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x60800003da40>>",
          "E" : "<RCTUITextField: 0x7fd5b8876000; baseClass = UITextField; frame = (0 0; 375 36); text = '[email protected]'; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x600000241bf0>; layer = <CALayer: 0x608000238080>>"
        },
        "Error Domain" : "com.google.earlgrey.ElementInteractionErrorDomain",
        "Error Code" : "2",
        "File Name" : "GREYActions.m",
        "Function Name" : "+[GREYActions grey_actionForTypeText:atUITextPosition:]_block_invoke",
        "Line" : "547"
      }
    ]

      at Client._callee8$ (node_modules/detox/lib/client/Client.js:58:19)
      at tryCatch (node_modules/regenerator-runtime/runtime.js:63:40)
      at Generator.invoke [as _invoke] (node_modules/regenerator-runtime/runtime.js:337:22)
      at Generator.prototype.(anonymous function) [as throw] (node_modules/regenerator-runtime/runtime.js:96:21)
      at step (node_modules/detox/lib/client/Client.js:1:836)
      at node_modules/detox/lib/client/Client.js:1:1035
      at tryCallOne (node_modules/promise/lib/core.js:37:12)
      at node_modules/promise/lib/core.js:123:15
      at flush (node_modules/asap/raw.js:50:29)
      at _combinedTickCallback (internal/process/next_tick.js:131:7)
      at process._tickCallback (internal/process/next_tick.js:180:9)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 passed, 2 total
Snapshots:   0 total
Time:        15.713s
Ran all test suites matching /e2e/i.

Any ideas, what could be the issue?

EDIT:
Stack Overflow: https://stackoverflow.com/questions/47444157/ios-earlgrey-detox-error-after-running-the-same-test-twice

questiostack overflow

>All comments

Please use Stack Overflow for support questions.

Was this page helpful?
0 / 5 - 0 ratings