我正在使用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不是函数

最佳答案

据我所知,您遇到的问题是.windowHandles命令需要this.api而不是this,并且由于它是在.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');
               });
            })
        })
    }
};


我还建议将针对新页面运行的命令移至.switchWindow回调中(如我所示),因为在尝试引用原始窗口句柄时,您可能会遇到问题。

07-25 20:54