僵尸浏览器调用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议。 我怀疑我错过了很简单的事情。
这个问题有一段时间没有答案,但我最近一直在解决类似的错误消息。
TL; DR – 用户browser.visit而不是browser.open()并传入callback函数以确保浏览器的状态正确填充。
您可以通过多种方式来完成此操作:
- 使用静态方法Browser.visit()
const Browser = require('zombie'); var url = 'https://stackoverflow.com' Browser.visit(url, function(error, browser) { browser.assert.text('title', 'Stack Overflow'); });
- 使用实例方法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'); });
- 使用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'); });
- 如果要在访问后重新使用浏览器对象,请将一个无操作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()来保证安全。