Nightwatch页面对象中windowHandles的使用

时间:2019-05-29 18:45:25

标签: javascript function nightwatch.js

我正在使用Nightwatch JS页面对象来创建测试。单击打开新选项卡的链接时,我无法将焦点切换到新选项卡。

任何其他搜索都没有在页面对象中使用windowHandles。

var verifyHomepage = {
    verifyPrivacy: function () {
        return this.waitForElementVisible('body', 20000)
            .click('@privacyLink')
            .windowHandles(function (result) {
                var handle = result.value[1];
                this.switchWindow(handle);
            })
        .waitForElementVisible('body', 20000)
        .assert.urlContains('/regression/en-us/PrivacyStatement')
        .assert.containsText('@privacyHeader', 'Privacy Statement');
    }
};


module.exports = {
    commands: [verifyHomepage],
    url: function () {
        return this.api.launchUrl;
    },

    elements: {
        // Fill in the empty quotes with your selectors
        header: '#customBlock > div > h1',
        login: '#loginBtn',
        homeLogo: '#siteLogo',
        footerLogo: '#siteLogoFooter',
        homeLink: '#footerBtnHome > a',
        privacyLink: '#footerPrivacyStatment > a',
        privacyHeader: '#mainBlock > div > h1'
    }
};

this.waitForElementVisible(...)。click(...)。windowHandles不是函数

1 个答案:

答案 0 :(得分:1)

据我所知,您遇到的问题是.windowHandles命令需要this.api而不是this,并且因为它是在{{ 1}}回调函数,它继承了.waitForElementVisible。因此,您可以尝试的一件事是将this命令放在.windowHandles回调函数中,如下所示:

.click

我还建议将针对新页面运行的命令移至var verifyHomepage = { verifyPrivacy: function () { return this.waitForElementVisible('body', 20000) .click('@privacyLink', function () { this.api.windowHandles(function (result) { var handle = result.value[1]; this.switchWindow(handle, function () { this.waitForElementVisible('body', 20000) .assert.urlContains('/regression/en-us/PrivacyStatement') .assert.containsText('@privacyHeader', 'Privacy Statement'); }); }) }) } }; 回调中,如图所示,因为在尝试引用原始窗口句柄时可能会遇到问题。