2012-08-09 16 views
0

我有我的WebDriver腳本檢查,我在哪裏拉出一個日期字段的頁面。爲什麼AreEquals說在兩個雙引號中有兩個值不正確?

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的控制檯中看到的是:

error: Expected: "2012" But was: 2012

我真的不明白兩者之間的區別,是引用值的字符串?我在腳本中添加了轉換,以確保它們是相同的類型,並在可能存在空白的情況下添加修剪。

如果我想完成這項工作,我沒有做什麼來讓評估通過?

+0

因爲一個String <>到一個Int – MethodMan 2012-08-09 16:46:58

+0

一個是字符串,另一個是int? – Alxandr 2012-08-09 16:47:05

+0

你需要將日期轉換爲字符串表示使用.ToString()將日期轉換爲字符串。表示 – MethodMan 2012-08-09 16:48:02

回答

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); 
+0

這是我沒有得到的.NET「字符串在.NET中是不可變的」,因爲這不是我的主要編碼語言有方面它我還不太習慣。感謝深入的解釋,我很欣賞它。 – MichaelF 2012-08-09 18:03:18

+0

因爲你花時間向我解釋這一點,所以讓你贏得這場勝利。 – MichaelF 2012-08-10 11:57:39

2

copyYear是一個字符串。 nowYear是int。您的線路

nowYear.ToString().Trim(); 

不會以任何方式改變nowYear。您想要作爲該行結果進行比較的字符串未分配給任何變量。你需要做

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

然後比較nowYearStr到copyYear。

+0

啊......我認爲這會改變價值,所以我不需要重新分配它。不好的舉動......就是這樣。謝謝! – MichaelF 2012-08-09 16:52:07

+0

@MichaelF:它如何根據* string *操作改變'nowYear'(這是一個'int')的值? – 2012-08-09 17:55:17

+0

@JonSkeet .Net不是我的主要編碼語言 – MichaelF 2012-08-09 18:05:08

相關問題