Cypress If语句始终不生效,判断formcontrolname属性字段失败如何解决
问题解决方法
1. 当前代码逻辑错误原因
你调用.text()方法获取的是<textarea>标签包裹的内部文本内容,从提供的HTML结构可以看到,该textarea标签内部没有任何文本内容,自然永远无法匹配到productName字符串,所以始终走入else分支。
如果要获取元素的formcontrolname属性值做判断,需要用jQuery的.attr()方法,正确写法如下:
cy.get('[formcontrolname="productName"]').then(($productName) => { if ($productName.attr('formcontrolname') === 'productName') { cy.log('已找到对应产品名字段'); } else { cy.log('未找到对应产品名字段'); } });
2. 判断字段只读/禁用状态的正确写法
你最初的需求是校验字段是否为只读状态,不需要手动编写if判断,直接使用Cypress内置断言即可,写法更简单也更符合Cypress最佳实践:
- 校验Angular组件禁用状态(对应你HTML中
ng-reflect-enabled=""的特征):
cy.get('[formcontrolname="productName"]').should('be.disabled')
- 校验原生只读属性:
cy.get('[formcontrolname="productName"]').should('have.attr', 'readonly')
如果确实需要手动编写逻辑分支判断,可以用如下写法:
cy.get('[formcontrolname="productName"]').then(($productName) => { // 判断是否为禁用状态 if ($productName.is(':disabled')) { cy.log('字段为禁用/只读状态'); } else { cy.log('字段可编辑'); } })
内容的提问来源于stack exchange,提问作者Sam2142
相关产品推荐
相关产品推荐

