僵尸浏览器在调用open函数后不会打开一个窗口

时间:2015-04-23 23:01:24

标签: javascript node.js zombie.js io.js

工具

尝试1

  • Darwin 14.3.0 Darwin Kernel Version 14.3.0
  • io.js v1.8.1
  • zombie Version 4.0.7 2015-04-10

尝试2

  • Linux ubuntuG5 3.13.0-48-powerpc64-smp
  • node.js v0.10.38
  • zombie Version 3.1.0 2015-03-15

命令:

const Browser = require('zombie');
var url = 'https://google.com'
var browser = new Browser();
browser.open(url=url)
browser.open('http://google.com', function(err) { browser.assert.success();
});
browser.assert.text('title', 'Google');

两台计算机上的结果减去文件路径差异:

    assert.js:93
  throw new assert.AssertionError({
        ^
AssertionError: No open window with an HTML document
    at Browser.queryAll (/home/dmmmd/Dropbox/node_js_projects/node_modules/zombie/lib/index.js:432:5)
    at Assert.text (/home/dmmmd/Dropbox/node_js_projects/node_modules/zombie/lib/assert.js:307:33)
    at Object.<anonymous> (/home/dmmmd/Dropbox/node_js_projects/affinity-zombie/sample_zombie.js:7:16)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:935:3

zombie browser阅读文档后我错过了什么?提前谢谢。

我也尝试了其他一些网址,即使是本地网站也没有成功。

JavaScript,node.js,io.js和zombie对我来说都是新手,所以我基本上只是从文档和stackoverflow问题中了解食谱。我将不胜感激任何建议。我怀疑我错过了一些非常简单的事情。

1 个答案:

答案 0 :(得分:1)

这个问题暂时没有答案,但我最近一直在处理类似的错误消息。

TL; DR - 用户browser.visit而不是browser.open()并传入回调函数以确保正确填充浏览器的状态。

您可以通过多种方式执行此操作:

  1. 使用静态方法Browser.visit()
  2. const Browser = require('zombie');
    var url = 'https://stackoverflow.com'
    Browser.visit(url, function(error, browser) {
        browser.assert.text('title', 'Stack Overflow');
    });
    
    1. 使用实例方法browser.visit()
    2. const Browser = require('zombie');
      var url = 'https://stackoverflow.com'
      var browser = new Browser();
      browser.visit(url, function() {
          browser.assert.text('title', 'Stack Overflow');
      });
      
      1. 使用browser.visit()
      2. 返回的承诺
        const Browser = require('zombie');
        var url = 'https://stackoverflow.com'
        var browser = new Browser();
        browser.visit(url).then(function() {
            browser.assert.text('title', 'Stack Overflow');
        });
        
        1. 如果您想在访问后重复使用浏览器对象,请将无操作回调传递给browser.visit(),以确保填充浏览器的状态。
        2. const Browser = require('zombie');
          var url = 'https://stackoverflow.com'
          var browser = new Browser();
          browser.visit(url, function(){}); // NB: no-op callback!
          browser.assert.text('title', 'Stack Overflow');
          

          browser.open()方法打开一个新的浏览器选项卡,并获取一个包含url属性的JavaScript对象,因此您的原始代码有语法错误,该行

          browser.open(url=url)
          

          应该阅读

          browser.open({url: url})
          

          但是不清楚open方法是否实际上使新标签访问了网址 - 至少不是粗略阅读来源。使用browser.visit()是安全的。