如何修复Nightwatch.js中的“ browser.elements不是函数”错误?

时间:2019-05-04 09:09:02

标签: nightwatch.js

我试图在Nightwatch js中使用页面对象,并在其中创建自己的命令。由于某种原因,Nightwatch现在似乎无法识别浏览器上的标准命令,并给我不同命令的类型错误。我的代码在做什么错了?

我已经在这里尝试了不同的操作,例如在命令前添加“ this”或“ browser”,但没有帮助。我的代码已经经历了许多版本,我什至不再确定在搜索错误后尝试了什么。

我的pageObject:

const homePageCommands = {
    deleteAllListItems: function (browser) {
        browser
            .elements('css selector', '#mytodos img', function (res) {
                res.value.forEach(elementObject => {
                    browser.elementIdClick(elementObject.ELEMENT);
                });
            })
            .api.pause(1000)

        return this;
    }
};

module.exports = {
    url: "http://www.todolistme.net"
    },
    elements: {
        myTodoList: {
            selector: '#mytodos'
        },
        deleteItemButton: {
            selector: 'img'
        }
    },
    commands: [homePageCommands]
};

我的测试:

require('../nightwatch.conf.js');

module.exports = {
    'Validate all todo list items can be removed' : function(browser) {
        const homePage = browser.page.homePage();

        homePage.navigate()
            .deleteAllListItems(homePage)
// I have not continued the test yet because of the error 
// Should assert that there are no list items left

    }
};

定制命令的预期行为是遍历元素,然后单击它。 实际结果:

TypeError: browser.elements is not a function
       at Page.deleteAllListItems (/pageObjects/homePage.js:18:14)
       at Object.Validate all todo list items can be removed (/specs/addToList.js:8:14)
       at processTicksAndRejections (internal/process/next_tick.js:81:5)

并且: Error while running .navigateTo() protocol action: invalid session id

1 个答案:

答案 0 :(得分:0)

好像您需要在此行上将browser传递给deleteAllListItems函数而不是homePage

    homePage.navigate()
        .deleteAllListItems(homePage)