ios - واسرع - تحميل افضل لانشر للاندرويد



لا يمكن تشغيل هكود(7.3) اختبارات واجهة المستخدم في جينكينز (1)

أنا أحاول تشغيل اختبارات كسكودي واجهة المستخدم من سطر الأوامر على الجهاز جنكينز التي تعمل على جهاز الكمبيوتر المحلي. ومع ذلك، عندما أحاول تشغيل اختبارات واجهة المستخدم في جنكينز، يبدو أنها تفشل في إطلاق التطبيق في جهاز محاكاة. ما يحدث هو تحميل الجهاز في جهاز محاكاة، يفتح الهدف اختبار واجهة المستخدم، وتذهب الشاشة السوداء. ثم لا شيء يبدو أن يحدث لمدة 30 ثانية حتى أحصل على خطأ كما يلي (أتوقع التطبيق لإطلاق والتشغيل الآلي للبدء):

2016-04-22 11:44:54.549 XCTRunner[33303:299557] Running tests...
11:44:54.707 XCTRunner[33303:299590] _XCT_testBundleReadyWithProtocolVersion:minimumVersion: reply received
11:44:54.711 XCTRunner[33303:299587] _IDE_startExecutingTestPlanWithProtocolVersion:16
2016-04-22 11:45:24.730 XCTRunner[33303:299557] *** Assertion failure in void _XCTFailInCurrentTest(NSString *, ...)(), /Library/Caches/com.apple.xbs/Sources/XCTest_Sim/XCTest-10112/XCTestFramework/Classes/XCTestCase.m:63
2016-04-22 11:45:24.732 XCTRunner[33303:299557] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '_XCTFailInCurrentTest should only be called while a test is running.
Failure description: Failed to receive completion for <XCDeviceEvent:0x7f88c85972c0 page 12 usage 64 duration 0.01s within 30.0s'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000102369d85 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000101ddddeb objc_exception_throw + 48
    2   CoreFoundation                      0x0000000102369bea +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x0000000101a27e1e -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 169
    4   XCTest                              0x0000000101875bbf _XCTFailInCurrentTest + 375
    5   XCTest                              0x000000010189717c -[XCUIDevice _dispatchEventWithPage:usage:duration:] + 847
    6   XCTest                              0x00000001018c2612 XCInitializeForUITesting + 575
    7   XCTest                              0x000000010186191d -[XCTestDriver _runSuite] + 141
    8   XCTest                              0x00000001018627d1 -[XCTestDriver _checkForTestManager] + 259
    9   XCTest                              0x00000001018aca9a _XCTestMain + 628
    10  CoreFoundation                      0x000000010228f2ec __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    11  CoreFoundation                      0x0000000102284f75 __CFRunLoopDoBlocks + 341
    12  CoreFoundation                      0x00000001022846d2 __CFRunLoopRun + 850
    13  CoreFoundation                      0x00000001022840f8 CFRunLoopRunSpecific + 488
    14  GraphicsServices                    0x0000000104424ad2 GSEventRunModal + 161
    15  UIKit                               0x000000010271ff09 UIApplicationMain + 171
    16  XCTRunner                           0x00000001017e68ad XCTRunner + 6317
    17  libdyld.dylib                       0x0000000104c4692d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Build step 'Execute shell' marked build as failure
Finished: FAILURE

يمكن أن فشلت التطبيق لبدء لأن الجهاز جنكينز بلدي لا يمكن فتحه بسرعة كافية قبل فشل كودكود ضمنا الاختبار؟ أو هل يمكن أن يكون هناك إشعار منع التطبيق من إطلاق؟


ما يحدث هو أن شكتست يحاول إرسال الصفحة الرئيسية زر الصحافة إلى الجهاز، ولكن لا يتلقى إخطارا للانتهاء لمدة 30 ثانية.

أنا لا أعتقد أن لديها أي علاقة مع إشعار UIAlertView حجب زر الصفحة الرئيسية من إرسال الهدف الاختبار إلى الخلفية، حيث في تجربتي هذه المشكلة يثير رسالة خطأ مختلفة ( "Failed to background test runner within ..." ).

أنا لست على دراية حل جينكينز، ولكن إذا كنت تشك في مهلة لتكون قصيرة جدا، يمكنك محاولة تغييره على النحو التالي (بعض طريقة هاكي وجدت).

قم بإضافة السطور التالية إلى التعليمات البرمجية التي سيتم تشغيلها في وقت سابق ثم [XCTestDriver _runSuite] (على سبيل المثال، إضافة الخاص __attribute__((constructor)) وظيفة ووضع هذا الرمز داخل):

extern __attribute__((weak)) void* _XCTSetEventConfirmationTimeout(NSTimeInterval);
// Change the default 30 seconds timeout.
long MY_NEW_EC_TIMEOUT = 120;
NSLog(@"Trying to call _XCTSetEventConfirmationTimeout(%ld)", MY_NEW_EC_TIMEOUT);
if (&_XCTSetEventConfirmationTimeout) {
    NSLog(@"_XCTSetEventConfirmationTimeout address found");
    _XCTSetEventConfirmationTimeout(MY_NEW_EC_TIMEOUT);
    NSLog(@"_XCTSetEventConfirmationTimeout successfully called");
} else {
    NSLog(@"_XCTSetEventConfirmationTimeout address not found");
}




automation