2013-05-14 52 views
0

我正在爲webapp編寫測試。在應用程序的一個點上,使用Javascript完成網頁。 對於測試,我使用的是與Visual Studio 2012和NUnitSelenium。 我想檢查id=j_idt13:JNumber的文本框的文本值是否爲sometext在C#中用Selenium聲明Javascript值

IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
string valoare = (string)js.ExecuteScript("return $('#j_idt13\\:JNumber').val();"); 
Assert.IsTrue(valoare.Equals("sometext")); 

我不斷收到此錯誤:

"Syntax error, unrecognized expression: unsupported pseudo:JNumber".

缺少什麼我在這裏?

回答

1

我知道你有一些作品,但我想提醒你避免使用JavaScript來獲取元素的值,實際上一般應該做你的測試時,應避免除非有沒有其他辦法做你想做的事情。原因是Selenium應該像一個典型的用戶那樣行事。典型用戶不會將JavaScript輸入到頁面中,或直接與其交互。這對於使用jQuery來說是額外的,因爲你的測試不應該假設頁面上存在jQuery並且正在運行。硒本身提供了讀取字段的值的能力,所以我建議你你的代碼改寫爲這樣的:

driver.FindElement(By.Id("j_idt13:JNumber")).GetAttribute("value");

+0

我想你的例子,它的偉大工程。我不想使用JavaScript,我從來沒有使用過的getAttribute。謝謝。 – Robert 2013-05-15 06:45:06

0

一些試驗和錯誤之後,我發現一些作品:

string valoare = (string)js.ExecuteScript("return document.getElementById('j_idt13\\:JNumber').value;"); 

爲什麼它的工作原理,我不知道。基本上是相同的命令。 而jQuery正在與其他命令一起工作,而不是我首先嚐試的那個。

+1

巨大的問題是你得去上的ID命名方案是可怕的。你是該網頁的開發者嗎?如果沒有,請告訴他們。我很驚訝什麼工作的,尤其是':'在不僅jQuery的特殊意義,但很多不同的CSS框架。 – Arran 2013-05-14 15:23:21

+0

是的,我知道它不是一個好的命名方案。感謝您的評論。 – Robert 2013-05-15 06:50:03