如何修改Cypress断言实现下拉列表指定值全量校验?
解决Cypress下拉列表全量值校验问题
原代码的逻辑是验证下拉中的每个选项都属于指定值集合,但你需要的是验证指定值集合中的每一个值都存在于下拉列表,两者逻辑完全相反,这就是为什么修改不存在的值后断言仍通过的原因。
修改后的代码实现
export function check_f_e_Script_History_Status() { // 定义需要校验的所有目标状态文本 const expectedStatuses = [ '0 Undefined', '1 (Pending)', '2 (Sent)', '3 (Deployed)', '4 (Failed - will retry)', '5 (Failed - will not retry)', '6 (Reverted)', '7 (Deprecated)' ]; // 获取下拉列表的所有选项文本,整理成数组 cy.get('#emvScriptHistory > .ng-isolate-scope > .panel > :nth-child(1) > .form-horizontal > .form-group > :nth-child(2) > .form-control') .find('option') // 下拉列表选项通常为option元素,替换原注释的button定位 .invoke('text') .then(optionTexts => { // 处理文本格式,去除换行、空格并过滤空值 const actualStatuses = optionTexts.split('\n') .map(text => text.trim()) .filter(text => text.length > 0); // 遍历每个预期值,断言其必存在于实际选项中 expectedStatuses.forEach(status => { expect(actualStatuses).to.include(status); }); }); }
关键修改点说明
- 逻辑反转:从校验「每个选项都属于预期集合」,改为校验「每个预期值都存在于选项集合」,完全匹配你的需求
- 元素定位修正:下拉列表的可选项一般是
option标签,替换原代码中注释的button定位,确保获取正确的选项元素 - 文本格式处理:通过分割换行、去除首尾空格、过滤空值,避免因渲染格式差异导致的断言误判
- 全量校验触发:遍历预期值列表逐个断言,只要有一个值不存在就会直接触发断言失败
内容的提问来源于stack exchange,提问作者Michelle Murray
相关产品推荐
相关产品推荐

