如何解决错误“ TypeError:cy。[自定义命令]不是函数”?

时间:2019-09-11 11:47:50

标签: javascript typescript cypress

我在commands.js文件中编写了一些用于赛普拉斯自动化测试的功能,从中我只能调用一个功能,即“登录”,但无法调用另一个.js文件中的其他功能。赛普拉斯测试运行器显示

  

“ TypeError:cy.FillAddCaseDetails不是函数”

describe('Adding a Case on CSS Poratal ', function() {

  before(function () {
    cy.login()    // calling login function successfully
  })

  it('open add case',function(){
    cy.wait(9000)
    cy.hash().should('contains','#/home')
    cy.wait(['@GETcontentLoad']);
    cy.wait(['@POSTcontentLoad']);
    cy.get('[uib-tooltip="Add Case"]').click({force:true})
    cy.log('clicked on Add case')
    cy.wait(3000) 
    cy.get('[ng-click="lookup.cancel()"]').click({force: true})
    cy.get('[ng-click="lookup.closeAddCase()"]').click({force: true})
    cy.get('[uib-tooltip="Add Case"]').click({force:true}) 
    cy.wait(3000)
    cy.get('[ng-model="lookup.selectedPartner"]',{force:true})
      .type(AddJob.JobData.Partner,{force: true}) 
    cy.xpath('//input[@ng-model="lookup.selectedPartner"]')
      .should('be.visible').then(() => {
        cy.FillAddCaseDetails()   // unable to call   
        cy.FillCustomerDetails()  // unable to call 
      })

功能:

Cypress.Commands.add("FillCustomerDetails", () => {

  cy.get('[ng-model="lookup.firstName"]')
    .type(AddJob.JobData.FirstName, { force: true}) 

  cy.get('[ng-model="lookup.lastName"]')
    .type(AddJob.JobData.LastName, { force: true })

  cy.get('[ng-model="lookup.customerPhone"]')
    .type(AddJob.JobData.CustomerPhone, { force: true })

  cy.get('[value="NEXT"]').click({ force: true })
})

预期:函数将被调用
实际:TypeError:cy.FillAddCaseDetails不是函数

3 个答案:

答案 0 :(得分:0)

从赛普拉斯文档中:https://on.cypress.io/typescript#Types-for-custom-commands

如果您将cy.dataCy命令添加到您的supportFile中,如下所示:

// cypress/support/index.js
Cypress.Commands.add('dataCy', (value) => {
  return cy.get(`[data-cy=${value}]`)
})

然后,您可以通过在supportFile旁边创建一个新的TypeScript定义文件(在本例中为cypress / support / index.d.ts),将dataCy命令添加到全局Cypress Chainable接口(之所以称为命令,是因为命令链接在一起)。

// in cypress/support/index.d.ts
// load type definitions that come with Cypress module
/// <reference types="cypress" />

declare namespace Cypress {
  interface Chainable {
    /**
     * Custom command to select DOM element by data-cy attribute.
     * @example cy.dataCy('greeting')
    */
    dataCy(value: string): Chainable<Element>
  }
}

答案 1 :(得分:0)

在我的情况下,解决方案是重新启动cypress测试运行程序。

答案 2 :(得分:-2)

cy.xpath(“ // div [@ class ='c-navigatorItem-faceplate ng-scope ng-isolate-scope']”)。click(); 使用它是否有效,因为我收到TypeError cy.xpath不是函数