node.js zombie.js多个浏览器错误

我想login到Web应用程序并开始模拟 – 即访问一些页面并更改一些值。

我的代码是:

var Browser = require("zombie"); fail = function (error) {console.log(error)} function login(browser){ //console.log("login") return browser.visit("http://example.com/login").then(function(){ browser.fill('input[name="email"]', 'example@example.com') browser.fill('input[name="password"]', 'example') browser.pressButton("#login") return browser.wait().then(function() { return browser; }) }) } function simpleScenario(browser, id) { //browser.wait().then(function() { browser.visit("http://example.com/next_page") .then(function () { browser.wait(function() { var n = 5; var step = function () { var period = 100 + n; browser.evaluate("m.productvalue(" + period + ")"); if(n > 0) { setTimeout(step, 1000); } n--; }; step() }) .fail(fail) }); //}); } function sampleScenario(id) { var browser = new Browser({debug:false}) login(browser) .then(function () { console.log("logged in"); simpleScenario(browser, id); }) .fail(fail); } function loadTest(numberOfThreads) { for(i = 0; i < numberOfThreads; i++) { sampleScenario(i) } } loadTest(50); 

我的问题是 :当我在一个循环中执行我的函数一次,一切正常,但是当numberOfThreads是10或更多,我得到一个错误:
[TypeError:不能使用'in'运算符在null中search'compareDocumentPosition']
看来,如果有很多浏览器对象创build,那么僵尸无法pipe理它。 也许僵尸库太慢,无法使用multithreading? 我可以做同样的事情,而不使用Zombie.js,只有node.js? 或者,也许我的脚本的某些部分需要优化来运行Zombie.js?

错误消息[TypeError: Cannot use 'in' operator to search for 'compareDocumentPosition' in null]意味着僵尸会尝试将响应内容加载到Document对象中,但响应内容为null ,表示内容没有响应。

请注意,您的loginfunction并不是为了正确处理login过程而devise的,因为没有什么可以衡量login是否成功。 至less你应该添加一些waitfunction:

 function login(browser) { return browser.visit('http://example.com/login').then(function() { browser.fill('input[name="email"]', 'example@example.com') .fill('input[name="password"]', 'example') .pressButton("#login").then(function() { // check if h1 tag is there in 7 seconds. return browser.wait({waitDuration: '7s', element: "h1"}); }); }) } 

根据你的simpleScenario ,它必须wait返回一些没有错误的值。 或者僵尸会一直等到5秒。

我也有类似的问题,并通过删除debugging选项,同时创build浏览器的实例,得到解决。 由于2.0处于alpha阶段,因此也降级到v1.4.1