如何将 onBeforeLoad 创建为命令?
How to create onBeforeLoad as a command?
我创建了一个脚本,该脚本使用 Cypress 导航到 URL 和 onBeforeLoad:
const bomMessage = cy.stub().as('bom');
cy.visit('https://helloworld.com', {
onBeforeLoad(win) {
win.addEventListener('message', (event) => {
if (event.data.event === 'ReadyToGo') {
bomMessage(event.data);
}
});
},
});
但这是我的问题,我有一个场景,我输入 url 例如helloworld.com 和 link 内有一个名为“带我到下一页”的按钮 - 当我单击该按钮时,我希望触发 onBeforeLoad。我的想法是也许能够制作
onBeforeLoad(win) {
win.addEventListener('message', (event) => {
if (event.data.event === 'ReadyToGo') {
bomMessage(event.data);
}
});
},
作为一个命令,我可以在我的脚本中随时调用,等待它发生,否则失败。
是否可以在我的测试中随时调用 addEventListener 而不是在 cy.visit 调用中调用它?
回答后编辑:
Given('works', () => {
const bomMessage = cy.stub().as('bom');
cy.visit('https://helloworld.com')
cy.window().then((win) => {
win.addEventListener('message', (event) => {
if (event.data.event === 'ReadyToGo') {
bomMessage(event.data);
}
});
});
cy.get('@bom').should('be.calledOnce');
});
onBeforeLoad
挂钩已准备好处理初始页面访问期间发生的 message
事件。
但是你可以在测试中的任何地方设置它在触发器之前(在你的例子中是按钮点击)。
您只需要 win
对象。
cy.visit(...) // no listener here
cy.window().then(win => {
win.addEventListener('message', (event) => {
// set up the listener
});
}
cy.get('my-button').click() // triggers message event
我创建了一个脚本,该脚本使用 Cypress 导航到 URL 和 onBeforeLoad:
const bomMessage = cy.stub().as('bom');
cy.visit('https://helloworld.com', {
onBeforeLoad(win) {
win.addEventListener('message', (event) => {
if (event.data.event === 'ReadyToGo') {
bomMessage(event.data);
}
});
},
});
但这是我的问题,我有一个场景,我输入 url 例如helloworld.com 和 link 内有一个名为“带我到下一页”的按钮 - 当我单击该按钮时,我希望触发 onBeforeLoad。我的想法是也许能够制作
onBeforeLoad(win) {
win.addEventListener('message', (event) => {
if (event.data.event === 'ReadyToGo') {
bomMessage(event.data);
}
});
},
作为一个命令,我可以在我的脚本中随时调用,等待它发生,否则失败。
是否可以在我的测试中随时调用 addEventListener 而不是在 cy.visit 调用中调用它?
回答后编辑:
Given('works', () => {
const bomMessage = cy.stub().as('bom');
cy.visit('https://helloworld.com')
cy.window().then((win) => {
win.addEventListener('message', (event) => {
if (event.data.event === 'ReadyToGo') {
bomMessage(event.data);
}
});
});
cy.get('@bom').should('be.calledOnce');
});
onBeforeLoad
挂钩已准备好处理初始页面访问期间发生的 message
事件。
但是你可以在测试中的任何地方设置它在触发器之前(在你的例子中是按钮点击)。
您只需要 win
对象。
cy.visit(...) // no listener here
cy.window().then(win => {
win.addEventListener('message', (event) => {
// set up the listener
});
}
cy.get('my-button').click() // triggers message event