Cypress条件断言:如何校验表格第二列值范围及匹配aria-label属性
问题1解答
- 不推荐用正则匹配HTML属性,Cypress本身内置了属性选择器和断言能力,稳定性、可读性都远高于正则匹配。
- 更优的实现方案:直接定位每行第二列元素,用
oneOf断言校验aria-label属性值即可,代码如下:
const allowedValues = ['abc', 'bca', 'cda'] cy.get('[role="row"]').each(($row) => { // 第二列对应nth-child(2),元素选择器可根据实际页面结构调整为td等其他值 cy.wrap($row).find('[role="cell"]:nth-child(2)') .invoke('attr', 'aria-label') .should('be.oneOf', allowedValues) })
- 如果确实需要使用正则匹配(非必要场景不推荐),无视前后其他属性的匹配规则可以写为
/aria-label="(abc|bca|cda)"/。
问题2代码错误排查
你的代码有三处核心错误:
- 条件判断逻辑完全错误,这也是第一个条件永远为真的直接原因:
- 你把判断逻辑
'aria-label' == "abc"写在了html()方法的参数里,这个字符串比较本身永远返回false - jQuery的
html()方法传入参数后会返回jQuery对象本身,if判断中任何对象都属于真值,所以第一个条件永远触发 html()方法是用来获取/设置元素的HTML内容的,不是用来读取元素属性的,读取属性要使用attr()方法
- 你把判断逻辑
- 第二个和第三个
else if的判断条件重复,都写了匹配bca,永远走不到第三个校验cda的分支 - 没有先读取到元素的
aria-label属性值再做判断
修正后的代码如下:
cy.get($el).then(($try) => { const label = $try.attr('aria-label') if (label === "abc") { cy.log('it contains abc') } else if (label === "bca") { cy.log('it contains bca') } else if (label === "cda") { cy.log('it contains cda') } else { cy.log("DONT WORK") } })
内容的提问来源于stack exchange,提问作者dawidk09
相关产品推荐
相关产品推荐

