赛普拉斯自定义命令无法识别

时间:2019-01-10 17:21:19

标签: cypress

我想创建一个自定义的登录命令。我已经将该命令添加到了commands.js文件中,并且还将导入命令添加到了index.js中。

当我在集成文件夹下创建一个新的测试文件时,我尝试使用cy.loginWith()引用我的新命令,但是它不能将其识别为命令。

如果将导入../../../support/commands添加到新的登录规范文件的顶部,则cy.loginWith()自定义命令将被识别并正确调用。
但是我知道这不是一件好事。

这是我的commands.js文件中的自定义命令:

Cypress.Commands.add('loginWith' , (email, password) => {
    cy.get('[name="username"]').type(email)
    cy.get('[name="password"]').type(password)
    cy.get('[name="Login"]').click()
})

这是我的index.js文件:

import "./commands.js"

这是我的list.js规格文件,位于/cypress/integration/clients/client list/lists下:

/// <reference types="Cypress" />

import "../../../support/commands"

// login to the app
it('A User logs in and sees a welcome message', () => {
    cy.visit('.../login.cfm')
    cy.loginWith('username', 'password')
    expect(cy.contains('Welcome back!'))

   }
)

我可能配置错误,无法识别index.js文件吗?

5 个答案:

答案 0 :(得分:2)

我的问题是intellisense可以正常工作,并且一切都运行良好:

import '../support/commands';

我的修复非常简单...只需将supportFile添加到您的cypress.json

{
  "supportFile": "cypress/support/index.ts",
  "baseUrl": "http://localhost:3000"
}

答案 1 :(得分:0)

我重新启动了赛普拉斯,并选择了正确的项目文件夹,现在一切正常。我想对于我来说,解决方案是确保您选择正确的项目文件夹。不过要感谢您的所有建议。

答案 2 :(得分:0)

我有同样的问题。原来我忘了给函数加上cy前缀。仔细检查以确保您不只是使用名称来调用函数

答案 3 :(得分:0)

我遇到了同样的问题,但我的原因似乎不同。尽管如此,我还是为遇到相同问题的人添加了我的问题和解决方案,因为明显的结果是相同的错误。

我使用了 IntelliJ compile typescript 命令,这会在源 commands.js 文件旁边生成一个相应的伴随 commands.ts 文件。 Intellij 将这些文件隐藏在 ui 中,但您可以单击文件旁边的 > 以显示它们。 出于某种原因,import './commands' 更喜欢加载 commands.js,它没有自动更新并且缺少函数,而不是 .ts 文件。删除伴随 .js 文件解决了我的问题。

答案 4 :(得分:0)

以上方法都不适合我,但这很有效:

    declare global {
  namespace Cypress {
    interface Chainable {
      customCommand: typeof customCommand;
    }
  }
}

function customCommand(input: MyCustomClass) {
  // ...
}

Cypress.Commands.add('customCommand', customCommand);

在这里得到答案:https://github.com/cypress-io/cypress-documentation/issues/2565