2014-09-29 83 views
20

我正在用量角器运行测试,但似乎无法访问JS'窗口'对象。我甚至尝试添加在我的HTML文件中的标记,将包含类似从量角器访问窗口对象/浏览器范围

var a = window.location; 

,然后尝试想到(一),但我不能使它工作,我总是得到未定义的引用...

我应该如何处理以访问浏览器范围内的变量?

回答

21

假设你使用的是最新量角器版本,让我们说> = 1.1.0,希望> = 1.3.1

试图直接从量角器访问浏览器端的JS代码不会起作用,因为在量角器运行NodeJS和每个浏览器端代码通过Selenium JsonWireProtocol执行。

没有进一步的细节,工作示例:

browser.get('https://angularjs.org/'); 

的一行承诺,截至今日,立志'1.3.0-rc.3'

browser.executeScript('return window.angular.version.full;'); 

您可以直接在给定的预期声明量角器的使用期待为您解决承诺:

expect(browser.executeScript('return window.angular.version.full;')). 
    toEqual('1.3.0-rc.3'); 

长呃例如传递函数而不是字符串加上没有expect解决你的承诺。即更多的控制和做一些花哨的事情与结果。

browser.driver.executeScript(function() { 
    return window.angular.version.full; 
}).then(function(result) { 
    console.log('NodeJS-side console log result: ' + result); 
    //=> NodeJS-side console log result: 1.3.0-rc.3 
}); 
+1

实际上我用量角器版本,我不得不使用 'browser.executeScript( '回归MYVAR;'),然后(函数(MYVAR){...});',但工作完美, 谢谢! – hilnius 2014-10-10 09:06:20

+2

如果我使用这种方法返回窗口对象,我得到“最大调用堆栈大小超出”:( – chrismarx 2015-04-07 20:26:14

+1

@chrismarx可能是一个坏主意,只返回你真正需要的东西;) – 2015-04-08 07:43:55