如何从javascript返回一个数组? (ExecuteScript)

时间:2012-09-26 23:36:19

标签: c# .net webdriver selenium-webdriver

虽然返回一个字符串是cake,但我无法弄清楚如何返回一个数组,这是一个不起作用的例子(myURLs是一个全局数组变量):

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

错误是:对象引用未设置为对象的实例。

如果有人有一个返回阵列的例子,我很乐意看到它!

1 个答案:

答案 0 :(得分:10)

从JavaScript返回数组时,.NET绑定会返回ReadOnlyCollection<object>,而不是List<object>。这样做的原因是您不能期望更改返回的集合的内容并在页面上的JavaScript中更新它们。以下是an example取自WebDriver项目自己的.NET integration tests

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));
相关问题