Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从javascript返回数组?(执行脚本)_C#_.net_Webdriver_Selenium Webdriver - Fatal编程技术网

C# 如何从javascript返回数组?(执行脚本)

C# 如何从javascript返回数组?(执行脚本),c#,.net,webdriver,selenium-webdriver,C#,.net,Webdriver,Selenium Webdriver,虽然返回字符串很简单,但我不知道如何返回数组,这是一个不起作用的示例(MyURL是一个全局数组变量): List List=((IJavaScriptExecutor)驱动程序).ExecuteScript( “window.myURL=['aa'];window.myURL.push('bb');return window.myURL” )as列表; 错误是:对象引用未设置为对象的实例 如果有人有一个返回数组的例子,我很想看看 从JavaScript返回数组时,.NET绑定返回一个只读集合,

虽然返回字符串很简单,但我不知道如何返回数组,这是一个不起作用的示例(MyURL是一个全局数组变量):

List List=((IJavaScriptExecutor)驱动程序).ExecuteScript(
“window.myURL=['aa'];window.myURL.push('bb');return window.myURL”
)as列表;
错误是:对象引用未设置为对象的实例


如果有人有一个返回数组的例子,我很想看看

从JavaScript返回数组时,.NET绑定返回一个
只读集合
,而不是
列表
。原因是您不能期望更改返回集合的内容并在页面上的JavaScript中更新它们。以下内容摘自WebDriver项目自己的.NET

List expectedResult=new List();
预期结果。加上(“零”);
预期结果。添加(“一”);
预期结果。添加(“两”);
对象结果=ExecuteScript(“返回['zero','one','two'];”;
IsTrue(结果是ReadOnlyCollection,“结果是:“+result+”(“+result.GetType().Name+”));
ReadOnlyCollection列表=(ReadOnlyCollection)结果;
IsTrue(CompareLists(expectedResult.AsReadOnly(),list));

“object”应该写为“object”@Mik378
object
是C#中
System.object
的别名,因此没有区别。如果让它以字符串形式返回该数组,它将包含什么?例如,它会给你字符串
“['aa','bb']”或其他什么,还是什么都没有?我读得太快了,我以为它是Java代码;)@Mik378是的,当我试图编写java时,它会让我发疯,当我键入
字符串时,它会对我大喊大叫。很高兴从Selenium作者那里得到闪电般的回复,这就是Stack的全部内容:D
       List<object> list = ((IJavaScriptExecutor)driver).ExecuteScript(
        "window.myURLs = ['aa']; window.myURLs.push('bb'); return window.myURLs" 
        ) as List<object>;
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));