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

hil*_*ius 21 selenium jasmine selenium-webdriver protractor

我正在使用量角器运行测试,但似乎无法访问JS'window'对象.我甚至尝试在我的html文件中添加一个包含类似内容的标签

var a = window.location;
Run Code Online (Sandbox Code Playgroud)

然后尝试期待(a)但我无法使其工作,我总是得到未定义的引用...

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

Leo*_*cci 26

假设您使用的是最新版本的Protractor,假设> = 1.1.0,希望> = 1.3.1

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

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

browser.get('https://angularjs.org/');
Run Code Online (Sandbox Code Playgroud)

一线承诺,截至今天,已解决 '1.3.0-rc.3'

browser.executeScript('return window.angular.version.full;');
Run Code Online (Sandbox Code Playgroud)

您可以直接在期望声明中使用它,因为Protractor期望为您解决承诺:

expect(browser.executeScript('return window.angular.version.full;')).
  toEqual('1.3.0-rc.3');
Run Code Online (Sandbox Code Playgroud)

更长的示例传递函数而不是字符串加上而不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
});
Run Code Online (Sandbox Code Playgroud)

  • 如果我使用这种方法只返回窗口对象,我得到"超出最大调用堆栈大小":( (2认同)