1

我在我的 WebDriver 脚本中进行了以下检查,我从页面中提取了一个日期字段。

IWebElement crInfo = driver.FindElement(By.Id("crInfo"));
string copyDate = crInfo.Text;
// From the converted string now pulling out the year by index and length
string copyYear = copyDate.Substring(2, 4);
// Get the current year
int nowYear = DateTime.Today.Year;
// Converting the year
nowYear.ToString().Trim();
// Make the comparison to be sure the copyright is using the current date
Assert.AreEqual(copyYear,nowYear);

正如片段中所指出的,我想要做的是确认页面中显示的日期是当前年份,这只是一个 Web 前端检查,确保到位的函数返回正确的值。当我运行它时,我在 NUnit 控制台中看到的是:

错误:预期:“2012”但是是:2012

我真的不明白两者之间的区别,引用的值是字符串吗?我在我的脚本中添加了转换以确保它们是相同的类型,并添加了修剪以防可能存在空白。

如果我想完成这项工作,我没有做些什么来让资产通过?

4

2 回答 2

3

查看您的类型和断言:

string copyYear = ...
int nowYear = ...
Assert.AreEqual(copyYear,nowYear);

无论价值如何,这种断言永远不会通过。在 C# 中,字符串永远不会等于整数。虽然有些语言在这种情况下会进行类型强制,但 C# 不是其中之一。

另请注意,此行是无用的:

nowYear.ToString().Trim();

字符串在 .NET 中是不可变的 - 诸如Trim()不更改调用它们的字符串之类的方法 - 它们返回一个新字符串。你忽略了那个返回值......无论如何,你在一个你之后完全忽略的字符串上调用它。你可以使用:

string nowYearAsString = nowYear.ToString().Trim();
Assert.AreEqual(copyYear, nowYearAsString);

...或者您可以改为解析copyYearint第一个,然后进行比较:

int copyYearAsInt = int.Parse(copyYear);
Assert.AreEqual(copyYearAsInt, nowYear);
于 2012-08-09T16:47:37.607 回答
2

copyYear 是一个字符串。nowYear 是一个整数。你的线

nowYear.ToString().Trim();

不会以任何方式改变 nowYear。由于此行而要比较的字符串未分配给任何变量。你需要做

string nowYearStr =  nowYear.ToString().Trim();

然后将 nowYearStr 与 copyYear 进行比较。

于 2012-08-09T16:48:21.273 回答