c# - 如何从javascript返回一个数组? (执行脚本)

标签 c# .net webdriver selenium-webdriver

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

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

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

如果有人有返回数组的示例,我很乐意看到它!

最佳答案

从 JavaScript 返回数组时,.NET 绑定(bind)返回 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));

关于c# - 如何从javascript返回一个数组? (执行脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12612018/

相关文章:

c# - 获取 UIElement 或发送者的背景

c# - Windows 应用商店应用程序是否有 Deep Zoom 的替代方案?

.net - 仅提交一个实体的更改

c# - Silverlight - C# 和 VB.net 事件处理程序之间是否存在性能差异?

python - 如何在每个请求上使用 selenium python 轮换各种用户代理

java - 通过selenium在Internet Explorer中下载Excel文件

c# - GroupBy 之后的条件选择

c# - 使用 Word 2010 读取BuiltInDocumentProperties/CustomDocumentProperties 始终为空?

c# - 自动属性初始化器未填充

webdriver - Chromedriver 与 webdriverio - init 上未处理的请求