我想登录Web应用程序并开始模拟 – 即访问某些页面并更改某些值. 我的代码是: var Browser = require("zombie");fail = function (error) {console.log(error)}function login(browser){ //console.log("login") return br
我的代码是:
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一起运行?
请注意,您的登录功能并非旨在正确处理登录过程,因为无法测量登录是否成功.至少你应该添加一些等待功能:
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,它必须在等待中返回一些不是虚假值的东西.或者僵尸会一直等到5秒.