赛普拉斯管道console.log和命令日志输出

Jak*_* He 8 e2e-testing cypress

是否可以将赛普拉斯浏览器日志和命令日志重定向或捕获到输出?

我在这个主题上读了一些赛普拉斯的github 问题.但我不知道如何使它发挥作用.

基本上,我想在无头非GUI模式下捕获所有赛普拉斯GUI命令日志.如果我可以包含浏览器控制台日志会更好.目的是了解测试失败时发生的情况.

我使用teamcity作为ci.这是我的构建日志的示例.我想在这里看到所有命令日志.实际上,在服务器端运行的任何console.log cy.task都显示在构建日志中.跑步cy.task('log',message)太手动了.有更聪明的方法吗?

[09:49:08][Step 1/1] 2 of 4: new actions (52s)
[09:50:00][Step 1/1] 3 of 4: new actions (52s)
[09:50:53][Step 1/1] 4 of 4: new actions (53s)
[09:51:47][Step 1/1]   (Results)
[09:51:47][Step 1/1] 
[09:51:47][Step 1/1]   ???????????????????????????????????????
[09:51:47][Step 1/1]   ? Tests:        8                     ?
[09:51:47][Step 1/1]   ? Passing:      8                     ?
[09:51:47][Step 1/1]   ? Failing:      0                     ?
[09:51:47][Step 1/1]   ? Pending:      0                     ?
[09:51:47][Step 1/1]   ? Skipped:      0                     ?
[09:51:47][Step 1/1]   ? Screenshots:  0                     ?
[09:51:47][Step 1/1]   ? Video:        true                  ?
[09:51:47][Step 1/1]   ? Duration:     3 minutes, 38 seconds ?
[09:51:47][Step 1/1]   ? Estimated:    1 minute, 8 seconds   ?
[09:51:47][Step 1/1]   ? Spec Ran:     action/action_spec.js ?
[09:51:47][Step 1/1]   ???????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

M. *_*tin 30

将环境变量设置ELECTRON_ENABLE_LOGGING1将导致所有 Chrome 内部日志记录打印到控制台。

ELECTRON_ENABLE_LOGGING=1 npx cypress run
Run Code Online (Sandbox Code Playgroud)

ELECTRON_ENABLE_LOGGING

将 Chrome 的内部日志记录打印到控制台。

启用此功能后,除了捕获任何现有日志记录之外,还允许您使用以下命令在测试中手动登录console.log

console.log('Response JSON: ' + json)
Run Code Online (Sandbox Code Playgroud)

  • 太糟糕了,这仅在测试在电子中运行时有效,而不是在使用 chrome 时有效(`ELECTRON_ENABLE_LOGGING=1 npx cypress run --browser chrome`) (3认同)
  • 嘿@wamster,检查我的答案。或者直接访问 https://www.npmjs.com/package/cypress-terminal-report。这对我来说改变了游戏规则:) (3认同)

Jos*_*ica 20

从赛普拉斯3.0.0开始,您可以cy.task()直接访问节点并输出到节点控制台.来自文档:

// in test
cy.task('log', 'This will be output to the terminal')
Run Code Online (Sandbox Code Playgroud)
// in plugins file
on('task', {
  log (message) {
    console.log(message)
    return null
  }
})
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参见此处

我不知道如何直接将赛普拉斯日志镜像到控制台,但这至少是一种可行的替代方案.

  • 不知怎的,这对我不起作用。我使用的是最新的 Cypress 版本。 (2认同)
  • @AmitKumarGupta 这个答案直接取自[`cy.task`的文档页面](https://docs.cypress.io/api/commands/task.html)。如果您按照最新文档中的步骤操作但不起作用,那么您可能发现了一个错误,您可以[在 Github 上报告](https://github.com/cypress-io/cypress/issues/new )。 (2认同)

Pra*_*tel 10

供参考:

Cypress 社区将提供本机支持,这样我们就不必采取任何解决方法来在非 GUI(无头)CLI 上打印日志。

持续存在的问题: https: //github.com/cypress-io/cypress/issues/448包括对 3 个现有解决方法的参考https://github.com/cypress-io/cypress/issues/448#issuecomment-613236352


Arn*_*rod 8

扩展@Jos​​hua-wade的答案,您可以覆盖cy.log将对它的所有调用重定向到日志任务。就像下面这样:

Cypress.Commands.overwrite('log', (subject, message) => cy.task('log', message));

注意:这样做有一个小缺点:当您使用测试运行器运行测试时,LOG my message您将看到TASK log, my message. 但恕我直言,它可以忽略不计。