Coded UI自动化测试中Trace.WriteLine输出随机字符的原因排查
问题分析:Coded UI Trace.WriteLine 输出混乱的原因与解决办法
你遇到的输出混乱问题,核心是对DateTime.Now.ToString()的用法理解错了,咱们一步步拆解:
错误根源:ToString参数误用
你当前的代码里写了这样的语句:
Trace.WriteLine(DateTime.Now.ToString("Enter press"));
这里的ToString()参数要求是日期格式字符串(比如"yyyy/MM/dd - HH:mm:ss"),而不是你要输出的自定义文本。当你传入"Enter press"这种不符合日期格式规则的字符串时,.NET会把它当成格式指令解析:
- 比如
E会被替换成当前星期几的缩写,n是月份数字,p是AM/PM标记,r是RFC日期片段... - 无法识别的字符会被保留,但被格式指令替换后的内容和原文本混在一起,就出现了你看到的
EnPer pre46这种混乱输出。
正确的写法
要同时输出时间戳和自定义文本,你需要先格式化日期,再和文本拼接。如果用C# 6及以上版本,推荐用字符串插值:
// 先格式化时间,再拼接自定义文本 Trace.WriteLine($"{DateTime.Now.ToString("yyyy/MM/dd - HH:mm:ss")} | Enter press"); Keyboard.SendKeys("{TAB}"); Trace.WriteLine($"{DateTime.Now.ToString("yyyy/MM/dd - HH:mm:ss")} | Tab press x 20"); Keyboard.SendKeys("{TAB 4}"); Keyboard.SendKeys("{TAB 4}"); Keyboard.SendKeys("{TAB 4}"); Keyboard.SendKeys("{TAB 4}"); Keyboard.SendKeys("{TAB 4}"); Trace.WriteLine($"{DateTime.Now.ToString("yyyy/MM/dd - HH:mm:ss")} | Asserting Period cell state.");
如果你的项目用的是更早的C#版本,用普通字符串拼接也可以:
Trace.WriteLine(DateTime.Now.ToString("yyyy/MM/dd - HH:mm:ss") + " | Enter press");
额外小优化
为了避免重复写日期格式化代码,可以封装一个小方法:
private string GetFormattedTimestamp() { return DateTime.Now.ToString("yyyy/MM/dd - HH:mm:ss"); }
后续使用时就简洁多了:
Trace.WriteLine($"{GetFormattedTimestamp()} | Enter press");
内容的提问来源于stack exchange,提问作者Rusty Wizard
相关产品推荐
相关产品推荐

