【发布时间】:2021-10-15 13:32:24
【问题描述】:
我有以下代码:
cy.get('input:checkbox').first().as('firstCheckbox').then(() => {
cy.get('@firstCheckbox').should('be.checked').click()
cy.get('.globalMessage-display > :nth-child(1) > .alert').should('be.visible')
cy.get('.globalMessage-display > :nth-child(1) > .alert').should('not.exist')
cy.get('@firstCheckbox').should('not.be.checked').click()
cy.get('.globalMessage-display > :nth-child(1) > .alert').should('be.visible')
cy.get('.globalMessage-display > :nth-child(1) > .alert').should('not.exist')
cy.get('@firstCheckbox').should('be.checked')
})
在cy.get('@firstCheckbox').should('be.checked').click() 之后,复选框被移动到最后一个索引位置而不是第一个。
根据我对别名的理解,这应该无关紧要,因为我用('@') 引用它,它在哪个位置并不重要。不幸的是,下一个cy.get('@firstCheckbox') 访问的是新的第一个元素,而不是我最初引用的那个。我也无法从文档中弄清楚。
错误在哪里?
https://docs.cypress.io/guides/core-concepts/variables-and-aliases
https://docs.cypress.io/api/commands/as
@agoff 更新:
它似乎与您的代码配合得更好,但我注意到新代码存在一个新问题。 如果您取消选中该复选框,则该类将使用 js 重新加载,导致它从 dom 中短暂消失。之后它再也找不到它并且测试中止。 我也尝试过重新加载,但它再也找不到元素了。如何处理?
选中的复选框类的名称为custom-control-input ng-untouched ng-pristine ng-valid。在取消选中类名更改为custom-control-input.ng-untouched.ng-valid.ng-dirty 之后,元素被删除并重新加载到具有类名custom-control-input ng-untouched ng-pristine ng-valid 的DOM。问题出在第二个cy.wrap($el) 尝试找到元素custom-control-input.ng-untouched.ng-valid.ng-dirty,尽管搜索并找到了类custom-control-input ng-untouched ng-pristine ng-valid 的初始元素。那是我不明白的另一件事。
【问题讨论】:
-
这行
the checkbox is moved to the last index position instead of the first.是什么意思? -
如果我取消选中该复选框,则元素的索引将从 0 更改为最后一个位置。所以它被编码在我们的网站上。
标签: javascript jquery cypress