Cypress io-等待延迟加载的js文件
我们想测试一个网页,它在点击一个按钮后发出ajax请求 我们可以通过定义cy.route()来等待此ajax请求的响应 在ajax响应的onComplete块中,我们创建一个脚本标记并插入它:Cypress io-等待延迟加载的js文件,cypress,Cypress,我们想测试一个网页,它在点击一个按钮后发出ajax请求 我们可以通过定义cy.route()来等待此ajax请求的响应 在ajax响应的onComplete块中,我们创建一个脚本标记并插入它: new Ajax.Request( "exampleAjax", { method: "post", parameters: {'data-id': dataID}, onComplete: function(transport) { var snode = doc
new Ajax.Request( "exampleAjax", {
method: "post",
parameters: {'data-id': dataID},
onComplete: function(transport) {
var snode = document.createElement('script');
snode.setAttribute('type','text/javascript');
snode.setAttribute('src','/some.js');
document.getElementsByTagName('head')[0].appendChild(snode);
}
});
现在我们要等待加载并尝试一些.js
cy.route("GET", '/some.js').as('some_js')
cy.wait('@some_js')
但这是行不通的。我们如何才能做到这一点?这在cypress目前是不可能的。Cypress团队正在进行网络存根。请看。当我们仍在等待Art713链接的功能请求时,我们找到了一个解决方案: 我们让cypress检查在延迟加载的js文件中定义的全局变量/函数:
cy.window().its('<any global var / function>')
我不认为
onComplete
实际上触发了some.js
的get,它只是将脚本引用添加到DOM中。您在console网络选项卡中看到了什么吗?是的,您是对的。我们在onComplete中没有得到some.js,而是在插入DOM的脚本标记中引用它->然后浏览器加载some.js(可以在开发工具的网络选项卡中看到)。那么,我们如何等待加载一些.js呢?这很有趣,我想知道浏览器是否对动态添加的脚本标记做出了反应。下一个问题是,赛普拉斯对此有反应吗。其中是与cy.GET('.button')相关的cy.route(“GET”,'/some.js')
。单击()
?您可能需要在启动操作之前(但在cy.server()
之后)设置第二个路由观察程序。是的-我们已经设置了第二个路由观察程序:cy.route(“GET”,“/some.js”)。as('some_js');等等(“@some_js”)。但是它似乎没有被触发。我问的是cy.route('/some.js')
与按钮单击的关系在哪里,因为它应该在cy.server()
和.click()
之间,但您的代码表明它不是。也许您可以显示完整的测试,而不是片段。所有与完整网络层存根实现相关的内容的母问题-
cy.window().its('<any global var / function>')
{
"defaultCommandTimeout": 10000
}