グローバル変数の値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+"|");
私はこれを実行すると、str
はnull
で、ブラウザのJavaScriptコンソールにwindow.seleniumTesting
はundefined
として記録されます。
FirefoxDriver
の代わりにChromeDriver
を使用するとします。すべては期待どおりです(str
はJust A Test
、コンソールはログ:Just A Test
)。
これはJavaScriptコンテキストの問題のようです。 FirefoxDriveでは、JavaScriptコンテキストはWebページのコンテキストではないようです。
これは既知の問題ですか?ドライバのJavaScriptコンテキストをWebページのコンテキストに変更できますか?
[編集] OSX用にgeckodriver
を使用しています。
[EDIT]とFirefoxバージョン47
はあなたが取得しているよろしいです'FirefoxDriver'で' null'を実行しました。私の場合、両方のブラウザで正常に動作しています。:) –
@SaurabhGaurはい、確信しています。これはおそらく私が使用している 'gecko'ドライバによって引き起こされます。私の現在のFireFoxバージョンでは動作しないかもしれません。 – Titus
私はgeckodriverでfirefoxの現在のバージョンでそれを試しているし、私の場合は正常に動作しています。なぜあなたは 'Thread.currentThread()。wait(55000);'を使用していますか? '(String)((JavascriptExecutor)ブラウザ).executeAsyncScript(" callback = arguments [0]; callback(window.seleniumTesting); ");'として 'executeAsyncScript()'を使うより良い方法です。それは助けるかもしれません.. :) –