You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:31:30