2012-09-26 87 views
4

雖然返回一個字符串是蛋糕,我只是無法弄清楚如何返回一個數組,這是行不通的例子(myURLs是一個全局數組變量):如何從JavaScript返回數組? (ExecuteScript)

 List<object> list = ((IJavaScriptExecutor)driver).ExecuteScript(
     "window.myURLs = ['aa']; window.myURLs.push('bb'); return window.myURLs" 
     ) as List<object>; 

的錯誤是:對象引用未設置爲對象的實例。

如果有人有一個返回數組的例子,我很想看到它!

+0

「對象」 應寫爲 「對象」 – Mik378

+3

@ Mik378'object'爲'System.Object'在C#的別名,這樣就使得沒有區別。 –

+0

如果讓它將該數組作爲字符串返回,它將包含什麼?例如,它是否給你字符串'「['aa','bb']」'或其他什麼東西,或者什麼也不是? –

回答

9

從JavaScript返回數組時,.NET綁定返回ReadOnlyCollection<object>而不是List<object>。原因是你不能指望改變返回的集合的內容,並讓它們在頁面上的JavaScript中更新。以下是取自WebDriver項目自己的.NET integration testsan example

List<object> expectedResult = new List<object>(); 
expectedResult.Add("zero"); 
expectedResult.Add("one"); 
expectedResult.Add("two"); 
object result = ExecuteScript("return ['zero', 'one', 'two'];"); 
Assert.IsTrue(result is ReadOnlyCollection<object>, "result was: " + result + " (" + result.GetType().Name + ")"); 
ReadOnlyCollection<object> list = (ReadOnlyCollection<object>)result; 
Assert.IsTrue(CompareLists(expectedResult.AsReadOnly(), list)); 
+1

工程處理。很高興能得到Selenium作者的閃電答覆,這就是Stack的全部內容:D – Alex