Javascript 无法通过FirefoxDriver访问全局变量
我试图检索Javascript 无法通过FirefoxDriver访问全局变量,javascript,java,selenium,webdriver,Javascript,Java,Selenium,Webdriver,我试图检索JavaScript全局变量的值,当我在FireFox中运行测试时,我总是得到未定义的 这项试验在铬上是成功的 index.html <html> <head> <script type="text/javascript"> window.seleniumTesting = "Just A Test"; </script> </head> <body> .... </body> </
JavaScript
全局变量的值,当我在FireFox中运行测试时,我总是得到未定义的
这项试验在铬上是成功的
index.html
<html>
<head>
<script type="text/javascript">
window.seleniumTesting = "Just A Test";
</script>
</head>
<body>
....
</body>
</html>
当我运行此命令时,str
为null
,并且在浏览器的JavaScript控制台窗口中。seleniumTesting
被记录为未定义
如果我使用ChromeDriver
而不是FirefoxDriver
。一切正常(str
只是一个测试,控制台记录:只是一个测试
)
这似乎是一个JavaScript上下文问题。在FirefoxDrive中,JavaScript上下文似乎不是网页的上下文
这是一个已知的问题吗?我可以将驱动程序的JavaScript上下文更改为网页的上下文吗
[编辑]
我正在为OSX使用geckodriver
[编辑]和FireFox版本47。使用geckodriver
当前v0.10.0
,必须使用window.wrappedJSObject
访问窗口对象的非标准属性:
String str = (String)((JavascriptExecutor)driver).executeScript("return window.wrappedJSObject.seleniumTesting;");
您确定使用FirefoxDriver
会得到null
,因为在我的情况下,它在两个浏览器上都可以正常工作。:)@SaurabhGaur是的,我确定。这可能是由于我正在使用的gecko
驱动程序造成的。它可能不适用于我当前的FireFox版本。我正在使用geckodriver的FireFox当前版本进行尝试,它在我的情况下运行良好。为什么要使用Thread.currentThread().wait(55000)代码>??使用executeAsyncScript()
作为(字符串)((JavascriptExecutor)浏览器的更好方法代码>。可能会有帮助:)@SaurabhGaur我刚刚用executeAsyncScript(…)
尝试了一下,得到了同样的结果。我使用了wait(…)
调用来确保页面已完全加载。您能分享一下如何使用geckodriver
初始化FireFoxDriver
,因为我使用Marionetedriver
在firefox上测试它。非常感谢您的支持,也谢谢@SaurabhGaur。你怎么知道window.wrappedJSObject
在某些文档中提到过它吗?@Titus,它在木偶驱动程序的文档中提到过,木偶驱动程序是壁虎驱动程序下面的一层。好的,再次感谢。我会调查的,我只是刚刚开始做这一切。
String str = (String)((JavascriptExecutor)driver).executeScript("return window.wrappedJSObject.seleniumTesting;");