2016-09-09 6 views
2

グローバル変数の値JavaScriptを取得しようとしています.FireFoxでテストを実行すると、常にundefinedになります。FirefoxDriverでグローバル変数にアクセスできない

このテストはChromeで成功しています。

index.htmlを

<html> 
<head> 
<script type="text/javascript"> 
    window.seleniumTesting = "Just A Test"; 
</script> 
</head> 
<body> 
    .... 
</body> 
</html> 

Test.java

WebDriver drive = new FirefoxDriver(); 
driver.get("http://localhost"); 
// Wait for the page to load. I know there are better ways of doing this. 
synchronized (Thread.currentThread()) { 
    try { 
     Thread.currentThread().wait(55000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
String str = (String)((JavascriptExecutor) driver).executeScript("console.info(window.seleniumTesting); return window.seleniumTesting;"); 
System.out.println("str: |"+str+"|"); 

私はこれを実行すると、strnullで、ブラウザのJavaScriptコンソールにwindow.seleniumTestingundefinedとして記録されます。

FirefoxDriverの代わりにChromeDriverを使用するとします。すべては期待どおりです(strJust A Test、コンソールはログ:Just A Test)。

これはJavaScriptコンテキストの問題のようです。 FirefoxDriveでは、JavaScriptコンテキストはWebページのコンテキストではないようです。

これは既知の問題ですか?ドライバのJavaScriptコンテキストをWebページのコンテキストに変更できますか?

[編集] OSX用にgeckodriverを使用しています。

[EDIT]とFirefoxバージョン47

+0

はあなたが取得しているよろしいです'FirefoxDriver'で' null'を実行しました。私の場合、両方のブラウザで正常に動作しています。:) –

+0

@SaurabhGaurはい、確信しています。これはおそらく私が使用している 'gecko'ドライバによって引き起こされます。私の現在のFireFoxバージョンでは動作しないかもしれません。 – Titus

+0

私はgeckodriverでfirefoxの現在のバージョンでそれを試しているし、私の場合は正常に動作しています。なぜあなたは 'Thread.currentThread()。wait(55000);'を使用していますか? '(String)((JavascriptExecutor)ブラウザ).executeAsyncScript(" callback = arguments [0]; callback(window.seleniumTesting); ");'として 'executeAsyncScript()'を使うより良い方法です。それは助けるかもしれません.. :) –

答えて

2

現在geckodriverv0.10.0を使用すると、ウィンドウオブジェクトの非標準のプロパティにアクセスするためにwindow.wrappedJSObjectを使用する必要があります。

String str = (String)((JavascriptExecutor)driver).executeScript("return window.wrappedJSObject.seleniumTesting;"); 
+0

ありがとうございました。これもありがとうございます。@SaurabhGaurもありがとうございます。 'window.wrappedJSObject'については、どういうふうに知っていますか? – Titus

+0

@Titus、それはgeckoドライバの下の層であるマリオネットドライバのドキュメントに記載されています。 –

+0

もう一度、ありがとう。私はそれを見て、私はすべてのことから始めようとしています。 – Titus

関連する問題