赛普拉斯捡到了错误的元素?

时间:2018-10-11 15:27:06

标签: cypress

我正在尝试使用赛普拉斯查找并单击此元素:

<input class="form-control btn btn-primary" type="button" value="Log out">

我尝试了几种变体,但是最接近的是:

 cy.get("input[type='button']").filter('.btn-primary').should('have.value','Log out').click()

因此,当我运行此命令时,会收到以下响应:

expected [ <input.form-control.btn.btn-primary>, 1 more... ] to have value Log out, but the value was Edit.

当然,这里有一个名为“编辑”的按钮,但这不是我想要的按钮。我已经用should('have.value','Log out')子句指定了我想要的东西。

所以-为什么它坚持尝试使用错误的元素并失败?

更新:我终于做到了。

这是我最后使用的解决方案:

cy.get("input[type='button']").filter('.btn-primary').eq(1)
    .should('have.value','Log out').then(($btn) => {
          $btn.click()
        })

3 个答案:

答案 0 :(得分:1)

你能尝试

cy.get('input').find("[value='Log out']").click()

   cy.get("[value='Log out']").click()

显然,您需要开发人员添加ID,但我知道您的情况。

您也可以尝试是否只有一个btn-primary

cy.get('.btn-primary').click()

答案 1 :(得分:0)

这是对我有用的解决方案:

cy.get("input[type='button']").filter('.btn-primary').eq(1)
.should('have.value','Log out').then(($btn) => {
      $btn.click()
    })

答案 2 :(得分:0)

如何为该按钮设置唯一的testID并使其尽可能简单。

类似的东西:

data-test-id= "log-out-button" //put that in your button code

,然后在赛普拉斯中:

cy.get('[data-test-id="log-out-button"]')
  .click()

即使您可以设置函数来更有效地获取那些testID:

Command.Cypress.add('getTestID', (testID) => {
    cy.get(`[data-test-id="${testId}"]`)
})

,现在您为获取该按钮所做的一切(或每个具有testID的元素为:cy.getTestID('log-out-button')

相关问题