2017-11-22 10 views
1

同じテストを2回実行すると、2回目に失敗します。iOS:同じテストを2回実行した後のEarlgrey/Detoxエラー

手順再現する:

このテストに合格:

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); 
    }); 
}); 

これが失敗した:

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')).typeText('wronggmail.com'); 
    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')).typeText('wronggmail.com'); 
    await element(by.id('PasswordField')).typeText('wrongpass'); 

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

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

デトックス、ノード、デバイス、XcodeとMacOSのバージョン

$ yarn list --depth=0 | grep '[email protected]\| [email protected]' 
├─ [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 
  • 端末:iPhone 6 iOSの11.1(シミュレーター)

デバイスおよび冗長デトックスログ

$ 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. 

問題何ができるか上の任意のアイデア?

+2

すぎてわからないが、どのようにフィールドに失敗したテストで見えるようにするのを待っについて:。 が期待待つ(要素(by.id(「EmailField」)))toBeVisible(); または、.typeText()の前に.tap()を試してみてください。 – Nemoverflow

+0

@Nemoverflowそれだった!キーボードは何か変なことをしていた。 'typeText()'の前に '.tap()'を実行しました!ありがとうたくさん:) –

+2

@Nemoverflowあなたはこの質問が解決されるように答えとして投稿してもいいですか? – Antoni4

答えて

0

このフォームを回答フォームに投稿してください。遅れて申し訳ありません。

.typeText()の前に.tap()を試してみてください。この約1

[...] 
await expect(element(by.id('EmailField'))).toBeVisible(); 
await element(by.id('EmailField')).tap(); 
[...] 
関連する問題