Selenium 从量角器访问窗口对象/浏览器范围

Selenium 从量角器访问窗口对象/浏览器范围,selenium,selenium-webdriver,jasmine,protractor,Selenium,Selenium Webdriver,Jasmine,Protractor,我正在用量角器运行测试,但似乎无法访问JS‘window’对象。我甚至尝试在我的html文件中添加一个标记,其中包含如下内容 var a = window.location; 然后尝试expect(a),但我无法让它工作,我总是得到未定义的引用 我应该如何处理以访问浏览器范围内的变量?假设您使用的是最新版本的量角器,比如>=1.1.0,希望>=1.3.1 试图直接从量角器访问浏览器端JS代码是行不通的,因为量角器在NodeJS中运行,并且每个浏览器端代码都是通过Selenium执行的 没有进一

我正在用量角器运行测试,但似乎无法访问JS‘window’对象。我甚至尝试在我的html文件中添加一个标记,其中包含如下内容

var a = window.location;
然后尝试expect(a),但我无法让它工作,我总是得到未定义的引用


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

假设您使用的是最新版本的量角器,比如>=1.1.0,希望>=1.3.1

试图直接从量角器访问浏览器端JS代码是行不通的,因为量角器在NodeJS中运行,并且每个浏览器端代码都是通过Selenium执行的

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

browser.get('https://angularjs.org/');
一行承诺,从今天起,决议为
'1.3.0-rc.3'

browser.executeScript('return window.angular.version.full;');
您可以在expect语句中直接使用它,因为Graphetor的expect为您解析承诺:

expect(browser.executeScript('return window.angular.version.full;')).
  toEqual('1.3.0-rc.3');
传递函数而不是字符串加号的较长示例,无需
expect
为您解析承诺。i、 为了更多的控制和做一些有结果的花哨的事情

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
});

实际上,对于我正在使用的量角器版本,我必须使用
browser.executeScript('returnmyvar;')。然后(function(myvar){…})但是工作得很好,谢谢!如果使用此方法仅返回窗口对象,则会得到“超出最大调用堆栈大小”:(无论如何,这可能是个坏主意@chrismarx,只返回您真正需要的;)@LeoGallucci,如果我需要获取目前不存在的窗口变量,您有何建议?例如
window.angular.version.full但版本将在将来某个时候填充。对不起,idk,我已经多年没有使用量角器了