我正在使用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
回调中(如我所示),因为在尝试引用原始窗口句柄时,您可能会遇到问题。