angular - 如何在 Cypress 测试中切换 Angular Tab

标签 angular angular-material cypress

我有一个注册/登录 Angular Material 表格

  <mat-tab-group class="signupDiv">
    <mat-tab label="Sign Up">
      <app-signup></app-signup>
    </mat-tab>
    <mat-tab id="idTabSignIn" label="Signin">
      <app-signin></app-signin>
    </mat-tab>
  </mat-tab-group>

我想构建一个类似 cypress 的测试

  1. 将标签切换到登录。
  2. 填写表格。
  3. 点击登录。

二和三没问题,但我很难解决 1。如何使用 Cypress 切换选项卡?

到目前为止我的代码

describe('Signin', () => {
  it('Sign with existing account', function () {
    cy.visit('/')
    cy.get('#idTabSignIn').click()   <---ERROR: idTabSignIn not found
  })
})

更新: 最后我用

解决了它
  it('Sign with existing account', function () {
    cy.visit('/')
    cy.get('.mat-tab-label').contains("Signin").click()
    cy.get('#idEmailSignIn').type(this.testUserData.email)
    cy.get('#idPasswordSignIn').type(this.testUserData.password)
    cy.get('#idSignInButton').click()
  })

最佳答案

Angular Material 库不会将 id 或 data-cy 等属性传播到正在运行的页面,因此 Cypress 无法使用它们。

这是你在开发工具中看到的

<div class="mat-tab-label-content">Signin</div>

IMO 最好的方法是基于标签文本,该文本从源中的属性移动到页面上的元素内容。

cy.contains('div.mat-tab-label-content', 'Signin').click()

如果您有响应式变体(桌面、移动),则选项卡可以有多个版本,因此您可能需要加强选择器上下文,例如

cy.contains('mat-tab-group.signupDiv div.mat-tab-label-content', 'Signin').click()

关于angular - 如何在 Cypress 测试中切换 Angular Tab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72379492/

相关文章:

Angular 6 - browser-crypto.js :3 Uncaught ReferenceError: global is not defined

angular - 简单表单 POST 的 Material mat-radio-button name 属性

angular-material - 在 Angular Material 中,如何 md-sidenav 始终打开

javascript - Cypress - iframe 处理

wait - 如何替换 Cypress 中的显式等待调用?

cypress - Cypress 是否在每次测试前清除浏览器缓存?

HTML <video> 元素导致它和下一个元素之间有空格

子模块的 Angular 合并路线

node.js - npm install 的问题(Angular)

angularjs - md-按钮尺寸(有 Angular Material )