Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以验证在Cypress测试的特定阶段没有短暂显示错误消息?_Cypress - Fatal编程技术网

是否可以验证在Cypress测试的特定阶段没有短暂显示错误消息?

是否可以验证在Cypress测试的特定阶段没有短暂显示错误消息?,cypress,Cypress,我有一份申请,要求在发送表格之前填写一些字段。填写字段并按下“提交”按钮时,会出现一个模式,说明这将向收件人发送信息。然而,在Cypress中,我也可以看到一条错误消息,上面说“表单无法发送”。这几乎无法手动复制,所以我猜柏树的速度就是它的表现。然而,有时,用户可以看到红色文本闪烁,即使它没有显示足够长的时间来阅读文本。 表单按原样发送,因此不会影响功能 有没有办法让Cypress验证特定文本在测试的特定阶段永远不可见 这是来自DOM的一个片段。此实例中未显示错误消息(我不知道正常运行时如何生成

我有一份申请,要求在发送表格之前填写一些字段。填写字段并按下“提交”按钮时,会出现一个模式,说明这将向收件人发送信息。然而,在Cypress中,我也可以看到一条错误消息,上面说“表单无法发送”。这几乎无法手动复制,所以我猜柏树的速度就是它的表现。然而,有时,用户可以看到红色文本闪烁,即使它没有显示足够长的时间来阅读文本。 表单按原样发送,因此不会影响功能

有没有办法让Cypress验证特定文本在测试的特定阶段永远不可见

这是来自DOM的一个片段。此实例中未显示错误消息(我不知道正常运行时如何生成):


...
警告
无法发送表单。请稍后再试。

使用的魔法是可能的。到目前为止,在Cypress中还没有预先发出的执行此操作的命令

此方法使用以下技术:

  • 创建一个MutationObserver,如果看到某个
    节点
    ,它可以将标志设置为
    true
  • 将MutationObserver附加到被测试的应用程序
  • 像往常一样运行测试
  • 检查标志是否未设置为
    true
  • 示例代码:

    让observedErrorMessage=false
    cy.visit('index5.html')
    // 1. 使用回调初始化MutationObserver
    常量观察者=新的变异观察者((记录)=>{
    //每次添加或删除时都会调用此命令
    //到DOM的节点
    记录。forEach((记录)=>{
    //addedNodes是“节点”对象的列表
    常数{addedNodes}=记录
    addedNodes.forEach(addedNode=>{
    //你可以使用任何在普通电脑上工作的东西
    //这里是HTMLElement
    if(addedNode.className=='错误消息'){
    //我们稍后将对此作出断言
    observedErrorMessage=真
    }
    })
    })
    })
    // 2. 将MutationObserver连接到您的应用程序代码
    cy.document()。然后($document=>
    //$document是对“window.document”的引用`
    //正在测试的应用程序的
    观察员观察($document.body{
    childList:true,//为添加/删除节点发出
    子树:true//emit用于树中的所有节点
    })
    )
    // 3. 在此处运行导致错误的测试
    //换页
    cy.wait(2000)
    // 4. 断言消息未被观察到
    cy.wrap()。然后(()=>{
    //我们将其包装在回调中,以便
    //“observedErrorMessage”仅在
    //前面的Cypress命令已完成
    expect(observedErrorMessage).to.be.false
    })
    
    这是一个广泛的例子,谢谢!然而(现在我完全暴露了我对JS/HTML等方面的知识的缺乏),元素一直存在,它通常是隐藏的。如果有帮助的话,我用一个HTML片段更新了我的原始问题。嗯,你在用
    ng开关
    隐藏元素?如果
    ng开关
    只是将其从DOM中删除,那么它仍然可以工作。你有没有试过,但没用?