将 Appium 测试结果记录到控制台
Log Appium testresults to console
Appium 不会将测试结果(UI-tests,使用 adb 模拟器执行)记录到调试输出 (Deug.WriteLine)。
根据文档,可以使用以下行获取测试日志
ILogs logs = driver.Manage().Logs;
但是,Appium 有不同的日志类型:
- 浏览器
- 客户
- Driver
- 探查器
- 服务器
我用下面的代码尝试了每一种日志类型。但是通过执行我没有得到任何结果并且测试将(我放置代码的地方)失败。有人能解决这个问题吗?
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);
}
在 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();
刚弄明白
先看看这篇文章
获取日志类型
IReadOnlyCollection<string> logTypes = driver.Manage().Logs.AvailableLogTypes;
foreach (string logType in logTypes)
{
Console.WriteLine(logType);
//logcat
//bugreport
//server
}
打印日志
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
Appium 不会将测试结果(UI-tests,使用 adb 模拟器执行)记录到调试输出 (Deug.WriteLine)。
根据文档,可以使用以下行获取测试日志
ILogs logs = driver.Manage().Logs;
但是,Appium 有不同的日志类型:
- 浏览器
- 客户
- Driver
- 探查器
- 服务器
我用下面的代码尝试了每一种日志类型。但是通过执行我没有得到任何结果并且测试将(我放置代码的地方)失败。有人能解决这个问题吗?
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);
}
在 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();
刚弄明白
先看看这篇文章
获取日志类型
IReadOnlyCollection<string> logTypes = driver.Manage().Logs.AvailableLogTypes; foreach (string logType in logTypes) { Console.WriteLine(logType); //logcat //bugreport //server }
打印日志
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