【问题标题】:Access window object / browser scope from protractor从量角器访问窗口对象/浏览器范围
【发布时间】:2014-11-23 23:28:01
【问题描述】:

我正在使用量角器运行测试,但似乎无法访问 JS 的“窗口”对象。我什至尝试在我的 html 文件中添加一个标签,其中包含类似

的内容
var a = window.location;

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

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

【问题讨论】:

    标签: selenium selenium-webdriver jasmine protractor


    【解决方案1】:

    假设您使用的是 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) { ... });,但效果很好,谢谢!
    • 如果我使用这种方法只返回窗口对象,我会得到“超出最大调用堆栈大小”:(
    • 无论如何@chrismarx 可能是个坏主意,只返回你真正需要的东西;)
    • @LeoGallucci,如果我需要获取此时不存在的窗口变量,你有什么建议?例如window.angular.version.full;,但版本将在未来某个时间填充。
    • 对不起,我已经好几年没用量角器了
    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 2016-01-23
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多