当Web应用程序意外地通过警报框抛出错误时,Cypress测试永远挂起/卡住,并且测试永远不会完成或失败,直到用户手动关闭浏览器或手动单击警报框的OK按钮。
我有一个下面的示例HTML页面再现的问题,在这里我明确抛出警告框后5秒的页面加载.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Button Alert Example</title>
</head>
<body>
<button onclick="changeLabel()">Click me for a label</button>
<p id="label"></p>
<iframe id="myFrame" style="display:none;"></iframe>
<script>
// Show alert after 5 seconds of page load within the frame
setTimeout(function() {
var frame = document.getElementById('myFrame');
frame.style.display = 'block';
frame.contentWindow.alert("Error While Processing Request");
}, 5000);
function changeLabel() {
document.getElementById('label').innerText = "You clicked the button!";
}
</script>
</body>
</html>
以下是重现问题的Cypress测试:
describe('Reproduce Alert Test', () => {
it('Handle alert in a Frame', () => {
cy.visit('/alert-test.html');
cy.wait(6000)
// Verify page title
cy.title().should('eq', 'Alert Example');
// Click the button and verify the label
cy.get('button').contains('Click me for a label').click();
cy.get('#label').should('have.text', 'You clicked the button!');
});
});
**注意:**当网页包含iFrame
,没有iFrame
时,Cypress会自动接受警报消息。
1条答案
按热度按时间wb1gzix01#
<iframe>
窗口上的cy.stub()将处理警报并允许测试继续。我还添加了一个Assert,用于检查存根是否收到调用。
下面是测试的日志:
真实的世界的iframe
在现实世界的应用程序中,你可能不会像上面那样幸运地使用简单的iframe代码。
使用cypress-iframe将使测试更可靠。