如何在ui测试时查看应用程序日志记录

时间:2017-01-05 14:35:27

标签: xctest xcode-ui-testing ui-testing

在我的Jenkins CI奴隶上的iOS应用程序上运行UI测试时,UI不正确,我的测试失败。在本地,相同的UI是预期的,测试通过。

我还没有能够解决这个问题,我无法在远程计算机上调试它。因此,我想添加日志记录,以查看应用程序正在做出哪些决定,以找出UI在远程Jenkins从站中显示不正确的原因。

测试日志输出不包含来自应用程序的日志输出(通过NSLog),也无法在派生数据中的任何.xcactivitylog文件中找到来自app NSLog调用的任何字符串输出文件夹。

在UI测试运行时,我在哪里可以找到我的应用程序的日志输出?这是使用Xcode 8.2运行iOS 9.3模拟设备。

1 个答案:

答案 0 :(得分:3)

以下解决方案有点hacky,但即使在设备上运行,您也可以获取日志。

Logger.h

#define Debug(...) _Debug(__VA_ARGS__)

void _Debug(NSString *format, ...);

Logger.m

void _Debug(NSString *format, ...)
{    
    format = [NSString stringWithFormat:@"[Debug]: %@", format];
    va_list args;
    va_start(args, format);
    NSLogv(format, args); // logs to the console

    NSString *logMessage = [[NSString alloc] initWithFormat:format arguments:arguments];
    UIApplication *application = [UIApplication sharedApplication];
    UIWindow *window = [application keyWindow];
    window.accessibilityValue = [NSString stringWithFormat:@"%@\n%@", window.accessibilityValue, logMessage];

    va_end(args);
}

然后从UI测试中,我可以像这样访问日志

+ (NSString *)logs
{
    XCUIElementQuery *windowQuery = [[[XCUIApplication alloc] init] windows];
    return [windowQuery elementAtIndex:0].value;
}