我正在使用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不是函数
答案 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');
});
})
})
}
};
回调中,如图所示,因为在尝试引用原始窗口句柄时可能会遇到问题。