当前位置 : 主页 > 网页制作 > Nodejs >

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

来源:互联网 收集:自由互联 发布时间:2021-06-16
我想登录Web应用程序并开始模拟 – 即访问某些页面并更改某些值. 我的代码是: var Browser = require("zombie");fail = function (error) {console.log(error)}function login(browser){ //console.log("login") return br
我想登录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一起运行?

错误消息[TypeError:无法使用’in’运算符来搜索null中的’compareDocumentPosition’]意味着僵尸会尝试将响应内容加载到Document对象中,但响应内容为null,这意味着内容尚未响应.

请注意,您的登录功能并非旨在正确处理登录过程,因为无法测量登录是否成功.至少你应该添加一些等待功能:

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秒.

网友评论