以下是我用Cypress开发的端到端测试。单击调用中的force:true参数是我后来添加的。如果不添加,会遇到报错信息:runoutofthemethod$Cy.ensureAttached,它位于runner/cypress_runner.js下。我想知道这个cypress_runner.js的本地位置:本地请求的URL:http://localhost:4200/__cypre...远程端口:59701?重定向到__?这个文件有200,000行代码:怀疑这个巨大的文件被合并:这里你可以看到所有的确保检查:触发断点时,很难从调用堆栈中找出哪一行e2espec代码触发了ensureAttached检查:但可以通过传入参数中指定的select,在e2e代码中搜索:cx-hamburger-menu[aria-label=\"Menu\"]通过参数说明,点击cx-hamburger的按钮元素:it很容易找到:具体逻辑是查看元素的ownerDocumentAttribute:这是WebAPI中Node元素的标准属性,看官网。接口的只读ownerDocument属性:返回节点的顶级文档对象。使用示例://给定节点“p”,获取文档对象的顶级HTML//子对象constd=p.ownerDocument;consthtml=d.documentElement;然后判断document对象是否有activeWindow:returnnodes.every(node=>{constdoc=_document__WEBPACK_IMPORTED_MODULE_1__[/*default*/"a"].getDocumentFromElement(node);if(!_document__WEBPACK_IMPORTED_MODULE_1__[/*default*/"a"].hasActiveWindow(doc)){returnfalse;}returnnode.isConnected;});};在这里,Cypress对firefox的处理也不同:因为在firefox中,即使是分离的文档仍然保留对window的引用。consthasActiveWindow=doc=>{//在firefox中,分离的文档仍然有对其窗口的引用//但document.location为nullif(Cypress.isBrowser('firefox')&&!doc.location){returnfalse;}返回!!doc.defaultView;};defaultView是WebAPI的另一个标准接口。在浏览器中,document.defaultView返回与文档关联的窗口对象,如果没有可用的,则返回null。这也是一个只读属性,返回与文档关联的窗口对象。如果元素所在的文档对象已经脱离DOM,defaultView指向null.node.isConnected:接口的只读isConnected属性返回一个布尔值,表示节点是否(直接或间接)连接到上下文对象,例如Document(ShadowRoot下的普通DOM案例对象),或ShadowRoot影子DOM案例中的对象。更多Jerry原创文章在这里:《王子熙》:
