排毒测试挂在 detox.init 的混合应用程序中

Posted

技术标签:

【中文标题】排毒测试挂在 detox.init 的混合应用程序中【英文标题】:Detox test hanging in hybrid app at detox.init 【发布时间】:2018-08-17 09:42:12 【问题描述】:

说明

在我的混合应用程序中运行 detox 时,detox 在超时之前卡在 init 上。 [最后一个日志是detox verb ws send: "type":"isReady","params":,"messageId":-1000]

混合应用程序具有原生登录,但大多数应用程序都是原生反应。如果我急于登录并进入应用程序的 react native 部分,那么 Detox 就会顺利运行。

设置

设置与https://github.com/wix/detox/blob/master/docs/Introduction.GettingStarted.md中描述的相同

init.js

onst detox = require('detox');
const config = require('../package.json').detox;

before(async () => 
  console.log("************************* CONSOLE LOG ASYNC BEFORE *************************");
  await detox.init(config);
  console.log("************************* CONSOLE LOG ASYNC END BEFORE *************************");
);

after(async () => 
  await detox.cleanup();
);

正如您在日志中看到的,它永远不会达到“CONSOLE LOG ASYNC END BEFORE”(除非我快速跳过应用程序的 ios 部分)

包.json

  "dependencies": 
    ...
    "mocha": "5.0.4",
    "detox": "7.1.0",
    ...
  ,
  "detox": 
    "configurations": 
      "ios.sim.debug": 
        "binaryPath": "member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app",
        "build": "xcodebuild -workspace member/ios/MyappMember.xcworkspace -scheme MyappMember -configuration Debug  -sdk iphonesimulator -derivedDataPath member/ios/build",
        "type": "ios.simulator",
        "name": "iPhone 7"
      
    
  ,

Detox、Node、Device、Xcode 和 macOS 版本

排毒:7.1.0 节点:8.9.4 设备:Iphone 7 模拟器 Xcode:9.2 macOS:10.12.6

设备和详细排毒日志

详细的排毒日志

Bug Crusher:mobile etai$ detox test -l verbose
node_modules/.bin/mocha e2e --opts e2e/mocha.opts  --loglevel verbose


************************* CONSOLE LOG ASYNC BEFORE *************************
detox-server info 16:50:24: server listening on localhost:57324...
detox verb ws onOpen [object Object]
detox verb ws send: "type":"login","params":"sessionId":"417aebb8-870c-5798-827c-de0301e7cf17","role":"tester","messageId":0
detox verb ws onMessage: "type":"loginSuccess","params":"sessionId":"417aebb8-870c-5798-827c-de0301e7cf17","role":"tester","messageId":0
detox verb ws
detox verb 1: applesimutils --list "iPhone 7" --maxResults=1
detox info 1: Searching for device matching iPhone 7...
detox verb 1: stdout: [
detox verb 1: stdout:   
detox verb 1: stdout:     "state" : "Booted",
detox verb 1: stdout:     "availability" : "(available)",
detox verb 1: stdout:     "name" : "iPhone 7",
detox verb 1: stdout:     "udid" : "ABE6CC96-22A1-4FB3-A62E-017033848CD7",
detox verb 1: stdout:     "os" : 
detox verb 1: stdout:       "version" : "11.2",
detox verb 1: stdout:       "availability" : "(available)",
detox verb 1: stdout:       "name" : "iOS 11.2",
detox verb 1: stdout:       "identifier" : "com.apple.CoreSimulator.SimRuntime.iOS-11-2",
detox verb 1: stdout:       "buildversion" : "15C107"
detox verb 1: stdout:     
detox verb 1: stdout:   
detox verb 1: stdout: ]
detox verb 1: stdout:
detox verb 2: detox verb 2: applesimutils --list
...
detox verb 3: /usr/bin/xcrun simctl uninstall ABE6CC96-22A1-4FB3-A62E-017033848CD7 com.myapp.MyappMemberDebug
detox info 3: Uninstalling com.myapp.MyappMemberDebug...
detox info 3: com.myapp.MyappMemberDebug uninstalled
detox verb 4: /usr/bin/xcrun simctl install ABE6CC96-22A1-4FB3-A62E-017033848CD7 /Users/etai/Code/data/mobile/member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app
detox info 4: Installing /Users/etai/Code/data/mobile/member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app...
detox info 4: /Users/etai/Code/data/mobile/member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app installed
detox verb 5: /usr/bin/xcrun simctl terminate ABE6CC96-22A1-4FB3-A62E-017033848CD7 com.myapp.MyappMemberDebug
detox info 5: Terminating com.myapp.MyappMemberDebug...
detox info 5: com.myapp.MyappMemberDebug terminated
detox verb 6: /bin/cat /dev/null >$HOME/Library/Developer/CoreSimulator/Devices/ABE6CC96-22A1-4FB3-A62E-017033848CD7/data/tmp/detox.last_launch_app_log.out 2>$HOME/Library/Developer/CoreSimulator/Devices/ABE6CC96-22A1-4FB3-A62E-017033848CD7/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/etai/Library/Detox/ios/fc3bb123b36c426327a2ab12f6d5185aa779ec37/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err ABE6CC96-22A1-4FB3-A62E-017033848CD7 com.myapp.MyappMemberDebug --args -detoxServer ws://localhost:57324 -detoxSessionId 417aebb8-870c-5798-827c-de0301e7cf17
detox info 6: Launching com.myapp.MyappMemberDebug...
detox verb 6: stdout: com.myapp.MyappMemberDebug: 6445
detox verb 6: stdout:
detox info 6: com.myapp.MyappMemberDebug launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F $HOME/Library/Developer/CoreSimulator/Devices/ABE6CC96-22A1-4FB3-A62E-017033848CD7/data/tmp/detox.last_launch_app_log.out,err
detox verb ws send: "type":"isReady","params":,"messageId":-1000
  1) "before all" hook

  0 passing (2m)
  1 failing

  1) "before all" hook:
     Error: Timeout of 120000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.




child_process.js:644
    throw err;
    ^

Error: Command failed: node_modules/.bin/mocha e2e --opts e2e/mocha.opts  --loglevel verbose
    at checkExecSyncError (child_process.js:601:13)
    at Object.execSync (child_process.js:641:13)
    at runMocha (/Users/etai/Code/data/mobile/node_modules/detox/local-cli/detox-test.js:72:6)
    at Object.<anonymous> (/Users/etai/Code/data/mobile/node_modules/detox/local-cli/detox-test.js:50:5)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)
Bug Crusher:mobile etai$

设备日志

2018-03-08 16:50:29.645 MyappMember[6445:1612042] Crash handler setup started.
2018-03-08 16:50:29.645 MyappMember[6445:1612042] Crash handler setup completed.
2018-03-08 16:50:29.646 MyappMember[6445:1612042] Enabling accessibility for automation on Simulator.
2018-03-08 16:50:30.447 MyappMember[6445:1612042] You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.
2018-03-08 16:50:30:452 MyappMember[6445:1612042] INFO: App did finish launching. Running v4.8.0.
2018-03-08 16:50:30:469 MyappMember[6445:1612042] INFO: First time app has been run. Clearing session token from keychain.
2018-03-08 16:50:30.519 MyappMember[6445:1612042] Simulator user has requested new graphics quality: 10
2018-03-08 16:50:30.567 MyappMember[6445:1612042] [Crashlytics] Version 3.8.6 (124)
2018-03-08 16:50:30:577 MyappMember[6445:1612042] INFO: App did become active
2018-03-08 16:50:30:583 MyappMember[6445:1612042] DBG: Device registered 0 | Alerts enabled 0
2018-03-08 16:50:30:584 MyappMember[6445:1612042] INFO: Checking if healthkit data available in background
2018-03-08 16:50:30:584 MyappMember[6445:1612042] INFO: Allocated new OIHealthKitService <OIHealthKitService: 0x6040002a5ac0>
2018-03-08 16:50:30:584 MyappMember[6445:1612042] INFO: Allocated steps data source
2018-03-08 16:50:30:584 MyappMember[6445:1612042] INFO: Allocated new steps data source <OIStepsDataSource: 0x6040000dc230>
2018-03-08 16:50:30.664 MyappMember[6445:1612042] Unknown class UIview in Interface Builder file.
2018-03-08 16:50:30:676 MyappMember[6445:1612042] INFO: [OIKeychainService searchKeychainCopyMatchingIdentifier:] Error -25300. Identifier com.myapp.keychain.session_token
2018-03-08 16:50:30:678 MyappMember[6445:1612042] INFO: View will appear for Logged Out Home Screen
2018-03-08 16:50:30:756 MyappMember[6445:1612042] INFO: Healthkit data available: 1
2018-03-08 16:50:30:779 MyappMember[6445:1612042] INFO: OIQuickLoginAuthManager: Prompt not shown this run
2018-03-08 16:50:30:780 MyappMember[6445:1612042] INFO: [OIKeychainService searchKeychainCopyMatchingIdentifier:] Error -25300. Identifier touchID
2018-03-08 16:50:30:781 MyappMember[6445:1612042] INFO: [OIKeychainService searchKeychainCopyMatchingIdentifier:] Error -25300. Identifier passcode
2018-03-08 16:50:30:781 MyappMember[6445:1612042] INFO: OIQuickLoginAuthManager: Neither touch id nor passcode enabled so nothing to do
2018-03-08 16:50:30:797 MyappMember[6445:1612042] INFO: View will appear for (null)
2018-03-08 16:50:30:797 MyappMember[6445:1612042] INFO: OIViewController session is nil!
2018-03-08 16:50:32.772 MyappMember[6445:1612042] [Crashlytics:Crash] Warning: NSUncaughtExceptionHandler is 'grey_uncaughtExceptionHandler' in '/Users/etai/Library/Detox/ios/fc3bb123b36c426327a2ab12f6d5185aa779ec37/Detox.framework/Frameworks/EarlGrey.framework/EarlGrey'
[Crashlytics] The signal SIGABRT has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGBUS has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGFPE has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGILL has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGSEGV has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGSYS has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGTRAP has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.

【问题讨论】:

错误提示 Promise 无法解析。也许您忘记了测试中的 async/await? 我更新为添加我的 init.js 以更好地显示失败的地方@Aseider 这似乎更像是一个错误而不是使用错误,所以我提出了一个问题:github.com/wix/detox/issues/615 【参考方案1】:

此错误与排毒内部有关。它是固定的。 https://github.com/wix/detox/issues/615

【讨论】:

即使使用 Detox 最新版本 (8.2.3),我们仍然会出现该问题

以上是关于排毒测试挂在 detox.init 的混合应用程序中的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义助手中访问排毒元素匹配器?

混合玩笑期待与排毒期待

排毒:测试时如何绕过身份验证

没有模拟器的 iPad 上的排毒测试

排毒:如何测试多行 TextInput

排毒自动化测试随机超时