5

文字列を返すのは簡単ですが、配列を返す方法がわかりません。これは機能しない例です(myURLsはグローバル配列変数です)。

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

エラーは次のとおりです。オブジェクト参照がオブジェクトのインスタンスに設定されていません。

誰かが配列を返す例を持っているなら、私はそれを見たいです!

4

1 に答える 1

11

JavaScriptから配列を返す場合、.NETバインディングは。ReadOnlyCollection<object>ではなくを返しますList<object>。これは、返されたコレクションの内容を変更して、ページのJavaScriptで更新することは期待できないためです。以下は、WebDriverプロジェクト独自の.NET統合テストから抜粋した例です。

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));
于 2012-09-27T00:02:40.267 に答える