TypeError:无法读取未定义的赛普拉斯的属性“ click”

时间:2019-08-05 11:58:22

标签: javascript cypress

我使用代码找到按钮:

  getClearObjectsButton() {
    cy.get('[class="ng-select ng-select-multiple ng-select-searchable ng-untouched ng-valid ng-select-focused ng-select-opened ng-select-top ng-dirty"]')
    .children('[class="ng-select-container ng-has-value"]')
    .children('[title="Clear all"]')  
  }

然后,我执行一些操作-例如单击,查看是否可见等。如果我在测试文件中直接拥有此代码,则所有工作正常。

register.getClearObjectsButton().click()

但是,如果我将辅助文件与创建的函数一起使用,则会出现标题中所示的错误。

cypress_runner.js:174495 TypeError: Cannot read property 'click' of undefined
    at Context.<anonymous> (tests?p=cypress\integration\create_user\check_objects_selector.js-106:580)
{{1}}

您知道如何解决此问题吗?

4 个答案:

答案 0 :(得分:1)

我对赛普拉斯还很陌生,但我建议您尝试以下操作:

1)最可能的问题/解决方案-“辅助文件”是否也已执行?我记得在调用cypress/support/commands.js文件中定义的辅助函数时遇到了一些问题。是command.js是您提到的“辅助文件”吗?似乎您用register.getClearObjectsButton()来调用它。什么是register?如果将getClearObjectsButton方法放入cypress/support/commands.js文件中,则可以使用cy.getClearObjectsButton()

在所有测试文件中调用该方法

2)如果已执行,请尝试也在该辅助文件中执行单击。可以吗?

3)另外,如果您确定自己的方法已执行,那么我想您已经期望cypress .get函数的产量保持“活动”状态,但事实并非如此。尝试将其保存在变量中,然后从您的getClearObjectsButton方法返回。

答案 1 :(得分:0)

是,文件已执行。

    import CreateUser from "C:/cypress-s/cypress/classes/CreateUser.spec.js";

    describe('Check role selector', () => {
        const register = new CreateUser();

     it.only('clear field button', () => {
            register.fillObject(0)
            register.getClearObjectsButton().click()
     })
})

我使用此文件中的函数进行其他测试,但从未遇到过此问题。

答案 2 :(得分:0)

另一种想法-也许这会对您有所帮助。

  getClearObjectButton() {
    cy.get('[class="ng-select ng-select-multiple ng-select-searchable ng-untouched ng-valid ng-select-focused ng-select-opened ng-select-top ng-dirty"]').children('[class="ng-select-container ng-has-value"]')
    .children('[title="Clear all"]').click()
  }

    it.only('clear field button', () => {
        register.fillObject(0)
        register.getClearObjectButton()
})

工作正常,但是如果更改click()的位置,则会出现错误提示。

  getClearObjectButton() {
    cy.get('[class="ng-select ng-select-multiple ng-select-searchable ng-untouched ng-valid ng-select-focused ng-select-opened ng-select-top ng-dirty"]').children('[class="ng-select-container ng-has-value"]')
    .children('[title="Clear all"]')
  }


   it.only('clear field button', () => {
        register.fillObject(0)
        register.getClearObjectButton().click()
})

答案 3 :(得分:0)

返回键:)

  getClearObjectButton() {
   rreturn cy.get('[class="ng-select ng-select-multiple ng-select-searchable ng-untouched ng-valid ng-select-focused ng-select-opened ng-select-top ng-dirty"]').children('[class="ng-select-container ng-has-value"]')
    .children('[title="Clear all"]')
  }


   it.only('clear field button', () => {
        register.fillObject(0)
        register.getClearObjectButton().click()
})