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

工具

尝试1

  • 达尔文14.3.0达尔文内核版本14.3.0
  • io.js v1.8.1
  • 僵尸版本4.0.7 2015-04-10

尝试2

  • Linux ubuntuG5 3.13.0-48-powerpc64-smp
  • node.js v0.10.38
  • 僵尸版本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'); 

在两台机器上的结果减去文件path差异:

  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 

在僵尸浏览器阅读文档后,我错过了什么? 提前致谢。

我也尝试了一些其他的URL,甚至本地主机也没有成功。

JavaScript,node.js,io.js和僵尸对我来说都是新的,所以我基本上只是遵循文档和stackoverflow问题的食谱。 我将不胜感激任何build议。 我怀疑我错过了很简单的事情。

       

网上收集的解决方案 "僵尸浏览器调用open函数后不会打开窗口"

这个问题有一段时间没有答案,但我最近一直在解决类似的错误消息。

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

您可以通过多种方式来完成此操作:

  1. 使用静态方法Browser.visit()
 const Browser = require('zombie'); var url = 'https://stackoverflow.com' Browser.visit(url, function(error, browser) { browser.assert.text('title', 'Stack Overflow'); }); 
  1. 使用实例方法browser.visit()
 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()返回的promise
 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. 如果要在访问后重新使用浏览器对象,请将一个无操作callback传递给browser.visit()以确保浏览器的状态已被填充。
 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方法是否实际上使新标签访问了url – 至less不是从源代码中粗略阅读。 使用browser.visit()来保证安全。