【发布时间】:2014-08-20 18:29:16
【问题描述】:
我想登录 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 中搜索 'compareDocumentPosition']
似乎如果创建了许多 Browser 对象,那么僵尸无法管理它。
也许僵尸库太慢而无法处理多个线程?我可以在不使用 Zombie.js 的情况下仅使用 node.js 做同样的事情吗?或者也许我的脚本的某些部分需要优化以与 Zombie.js 一起运行?
【问题讨论】: