【发布时间】:2014-11-23 23:28:01
【问题描述】:
我正在使用量角器运行测试,但似乎无法访问 JS 的“窗口”对象。我什至尝试在我的 html 文件中添加一个标签,其中包含类似
的内容var a = window.location;
然后尝试 expect(a) 但我无法让它工作,我总是得到未定义的引用...
我应该如何处理访问浏览器范围内的变量?
【问题讨论】:
标签: selenium selenium-webdriver jasmine protractor
我正在使用量角器运行测试,但似乎无法访问 JS 的“窗口”对象。我什至尝试在我的 html 文件中添加一个标签,其中包含类似
的内容var a = window.location;
然后尝试 expect(a) 但我无法让它工作,我总是得到未定义的引用...
我应该如何处理访问浏览器范围内的变量?
【问题讨论】:
标签: selenium selenium-webdriver jasmine protractor
假设您使用的是 Protractor 的最新版本,假设 >= 1.1.0,希望 >= 1.3.1
尝试直接从 Protractor 访问浏览器端 JS 代码将不起作用,因为 Protractor 在 NodeJS 中运行,并且每个浏览器端代码都通过 Selenium JsonWireProtocol 执行。
没有更多细节,一个工作示例:
browser.get('https://angularjs.org/');
单行承诺,从今天开始,解析为'1.3.0-rc.3'
browser.executeScript('return window.angular.version.full;');
鉴于 Protractor 的期望为您解析承诺,您可以直接在期望语句中使用它:
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
});
【讨论】:
browser.executeScript('return myvar;').then(function(myvar) { ... });,但效果很好,谢谢!
window.angular.version.full;,但版本将在未来某个时间填充。