Javascript 为什么在没有浏览器的情况下在本地找到DOM元素,但在CI中运行时却找不到?

Javascript 为什么在没有浏览器的情况下在本地找到DOM元素,但在CI中运行时却找不到?,javascript,gitlab-ci,cypress,Javascript,Gitlab Ci,Cypress,我正在使用Cypress进行自动测试 我正在处理这段代码,在这段代码上,测试可以通过本地测试,也可以不通过本地测试 但在GitLab CI中失败 html: CI runner的错误输出: AssertionError: Timed out retrying: Expected to find content: 'Logout' within the element: [ <a.navbar-item>, 1 more... ] but never did. at Con

我正在使用Cypress进行自动测试

我正在处理这段代码,在这段代码上,测试可以通过本地测试,也可以不通过本地测试 但在GitLab CI中失败

html:

CI runner的错误输出:

AssertionError: Timed out retrying: Expected to find content: 'Logout' within the element: [ <a.navbar-item>, 1 more... ] but never did.
      at Context.eval (http://nginx/__cypress/tests?p=cypress/integration/login.spec.js:37398:30)
AssertionError:超时重试:应在元素:[,还有1个…]中找到内容:“注销”,但从未找到。
在Context.eval(http://nginx/__cypress/tests?p=cypress/integration/login.spec.js:37398:30)
非常感谢您的帮助

Cypress版本6.0.0


(由于没有提供足够的详细信息,本文将绕过SO的触发器)

这可能是因为speed cypress在CI环境中运行,因此在断言期间可能不会呈现组件或未附加事件

为了确认它,您可以使用一些静态的
等待
,或者通过
应该
创建附加断言。导航栏结束
标识符:

cy.get('.navbar-burger').click(); 
cy.wait(2000);
...

注意:不要滥用
wait
命令,因为这是一种反模式。用柏树来表达这一点总是有更好的方法;)

这可能是因为speed cypress在CI环境中运行,因此在断言期间可能不会呈现组件或未附加事件

为了确认它,您可以使用一些静态的
等待
,或者通过
应该
创建附加断言。导航栏结束
标识符:

cy.get('.navbar-burger').click(); 
cy.wait(2000);
...
注意:不要滥用
wait
命令,因为这是一种反模式。用柏树来表达这一点总是有更好的方法;)

cy.wait()
在这里不需要

问题在于
contains()
的使用方式

cy.get('.navbar-item').contains('Logout')
不等待文本“注销”

你应该使用这种格式

cy.contains('.navbar-item', 'Logout')
它将重试所有操作,从读取所有
导航栏项到检查其文本以进行“注销”。

cy.wait()

问题在于
contains()
的使用方式

cy.get('.navbar-item').contains('Logout')
不等待文本“注销”

你应该使用这种格式

cy.contains('.navbar-item', 'Logout')

这将重试所有操作,从读取所有
导航栏项到检查其文本以进行“注销”。

这可能是因为speed cypress在CI环境中运行,因此在断言期间可能不会呈现组件或未附加事件。为了确认它,您可以使用一些静态的
wait
,或者通过
should
.navbar end
标识符创建附加断言:
cy.get('.navbar burger')。单击();cy.wait(2000)@AlexIzbas我在等待中增加了1000,让我们看看结果会是什么。@AlexIzbas成功了!Cypress只是在这些断言上需要多一点时间。请随意将其作为答案发布,我将为您勾选。非常感谢。很高兴它在伍德奏效了。我刚刚在应答中复制粘贴了注释。这可能是因为speed cypress在CI环境中运行,因此在断言期间可能不会呈现组件或不附加事件。为了确认它,您可以使用一些静态的
wait
,或者通过
should
.navbar end
标识符创建附加断言:
cy.get('.navbar burger')。单击();cy.wait(2000)@AlexIzbas我在等待中增加了1000,让我们看看结果会是什么。@AlexIzbas成功了!Cypress只是在这些断言上需要多一点时间。请随意将其作为答案发布,我将为您勾选。非常感谢。很高兴它在伍德奏效了。我刚刚在答案中复制粘贴了评论