【问题标题】:zombie browser won't open a window after calling open function僵尸浏览器调用open函数后不会打开窗口
【发布时间】:2015-08-21 07:09:56
【问题描述】:

工具

尝试 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');

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

    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 的文档后,我错过了什么?提前致谢。

我也尝试了其他一些 url,即使是 localhost 也没有成功。

JavaScript、node.js、io.js 和僵尸对我来说都是新的,所以我基本上只是按照文档和 stackoverflow 问题中的食谱。我将不胜感激任何建议。我怀疑我遗漏了一些非常简单的东西。

【问题讨论】:

  • 我不熟悉 Zombie,但这里发生了什么:browser.open(url=url)?不应该只是browser.open(url)吗?

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


【解决方案1】:

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

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

您可以通过多种方式做到这一点:

  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() 返回的承诺
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() 以确保填充浏览器的状态。
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 - 至少不是粗略地阅读源代码。为了安全起见,请使用 browser.visit()。

【讨论】:

  • 似乎有其他原因会导致此错误。在我的情况下,我错过了 clickLink() 的回调,并且不知何故导致了同样的错误。
  • @lipsumar 你有 clickLink() 的工作示例吗?
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2016-11-29
  • 1970-01-01
相关资源
最近更新 更多