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

Posted

技术标签:

【中文标题】ui测试时如何查看应用程序日志【英文标题】:How to view app logging when ui testing 【发布时间】:2017-05-20 03:36:58 【问题描述】:

在我的 Jenkins CI 从属设备上运行我的 ios 应用程序的 UI 测试时,UI 不正确并且我的测试失败。在本地,与预期相同的 UI 并通过了测试。

我无法弄清楚这一点,也无法调试它,因为它在远程机器上。因此,我想添加日志记录以查看应用程序正在做出哪些决定,以找出 UI 在远程 Jenkins 从站中显示不正确的原因。

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

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

【问题讨论】:

你试过了吗? ***.com/questions/10165641/… 获取模拟器的 UUID 正是我想要的。谢谢! 这是确切的链接:***.com/a/10165649/71877 我在fastlanescan 操作中添加了功能来收集日志,include_simulator_logs 【参考方案1】:

以下解决方案有点 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;

【讨论】:

是的,这是将值传回 UITest 的一种方式。

以上是关于ui测试时如何查看应用程序日志的主要内容,如果未能解决你的问题,请参考以下文章

如何编写在运行时确定视图内容的 Android UI 测试?

Android 测试,如何从Pc端获取App日志信息?

如何让 Xcode 7 保留来自 UI 测试目标的日志记录输出?

运行 UI 测试时无法捕获视图层次结构

oracle数据库的警告日志如何查看

运行 UI 自动化测试时如何忽略/停止推送器从日志记录到控制台