我正在尝试检索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
。一切都符合预期(FirefoxDriver
为str
,控制台记录:Just A Test
)。
这似乎是一个JavaScript上下文问题。似乎在FirefoxDrive中,JavaScript上下文不是网页的上下文。
这是一个已知问题吗?我可以将驱动程序的JavaScript上下文更改为网页的上下文吗?
[编辑]
我正在使用Just A Test
用于OSX。
[编辑]和FireFox版本47。
答案 0 :(得分:2)
使用geckodriver
当前v0.10.0
,您必须使用window.wrappedJSObject
来访问窗口对象的非标准属性:
String str = (String)((JavascriptExecutor)driver).executeScript("return window.wrappedJSObject.seleniumTesting;");