将Appium测试结果记录到控制台

时间:2019-03-26 07:40:17

标签: c# testing logging appium appium-desktop

Appium不会将测试结果(使用adb模拟器执行的UI测试)记录到调试输出(Deug.WriteLine)。

根据文档,可以通过以下行获取测试日志

ILogs logs = driver.Manage().Logs;

但是,Appium具有不同的日志类型:

  • 浏览器
  • 客户
  • 驱动程序
  • 分析器
  • 服务器

我使用以下代码尝试了每种日志类型。但是通过执行此操作,我不会得到任何结果,并且测试(将代码放置在其中)失败了。有人能解决这个问题吗?

ReadOnlyCollection<LogEntry> logs = _driver.Manage().Logs.GetLog(LogType.Browser);
//  ReadOnlyCollection<LogEntry> logs = _driver.Manage().Logs.GetLog(LogType.Client);
//  ReadOnlyCollection<LogEntry> logs = _driver.Manage().Logs.GetLog(LogType.Driver);
//  ReadOnlyCollection<LogEntry> logs = _driver.Manage().Logs.GetLog(LogType.Profiler);
//  ReadOnlyCollection<LogEntry> logs = _driver.Manage().Logs.GetLog(LogType.Server);

foreach (var log in logs)
{
    Debug.WriteLine("Time: " + log.Timestamp);
    Debug.WriteLine("Message: " + log.Message);
    Debug.WriteLine("Level: " + log.Level);
}

2 个答案:

答案 0 :(得分:1)

我才弄清楚。

  1. 请先查看此文章 relaxed Security AppiumService

  2. 获取日志类型

        IReadOnlyCollection<string> logTypes = driver.Manage().Logs.AvailableLogTypes;
        foreach (string logType in logTypes)
        {
            Console.WriteLine(logType);
            //logcat
            //bugreport
            //server
        }
    
  3. 打印日志

    public static void PrintLogs(string logType)
    {
        try
        {
            ILogs _logs = driver.Manage().Logs;
            var browserLogs = _logs.GetLog(logType);
            if (browserLogs.Count > 0)
            {
                foreach (var log in browserLogs)
                {
                    //log the message in a file
                    Console.WriteLine(log);
                }
            }
        }
        catch(Exception e)
        {
            //There are no log types present
            Console.WriteLine(e.ToString());
        }
    

Picture : C# Console Print appium log

答案 1 :(得分:-1)

在Java中,我使用以下代码进行操作:

List<LogEntry> logEntries = driver.manage().logs().get("logcat").getAll();
for (LogEntry logEntry : logEntries) {
        System.out.println(logEntry);
}

不确定此方法是否适用于C#。请尝试一下

List<LogEntry> logEntries = _driver.Manage().Logs().Get("logcat").GetAll();