无法通过FirefoxDriver访问全局变量

时间:2016-09-09 09:15:24

标签: javascript java selenium webdriver

我正在尝试检索public static function filterProduct($vars) { $query = Product::query(); if((array_key_exists('order_by', $vars)) && (array_key_exists('order', $vars))) { $query = $query->orderBy($vars['order_by'], $vars['order']); } if(array_key_exists('category_id', $vars) && $vars['category_id'] != 0) { $query = $query->whereHas('categories', function($q) use ($vars) { return $q->where('id', $vars['category_id']); }); } if(array_key_exists('manufacturer_id', $vars)) { $query = $query->whereHas('manufacturer', function($q) use ($vars) { return $q->where('id', $vars['manufacturer_id']); }); } $query = $query->whereHas('options', function($q) use ($vars) { }); 全局变量的值,当我在FireFox中运行测试时,我总是得到JavaScript

此测试在Chrome中取得了成功。

的index.html

undefined

Test.java

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

运行时,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,浏览器的JavaScript控制台null记录为window.seleniumTesting

如果我使用undefined代替ChromeDriver。一切都符合预期(FirefoxDriverstr,控制台记录:Just A Test)。

这似乎是一个JavaScript上下文问题。似乎在FirefoxDrive中,JavaScript上下文不是网页的上下文。

这是一个已知问题吗?我可以将驱动程序的JavaScript上下文更改为网页的上下文吗?

[编辑] 我正在使用Just A Test用于OSX。

[编辑]和FireFox版本47。

1 个答案:

答案 0 :(得分:2)

使用geckodriver当前v0.10.0,您必须使用window.wrappedJSObject来访问窗口对象的非标准属性:

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