Protractor问题:切换开关无论状态如何,isSelected()始终返回false
解决Protractor中开关ON状态isSelected()返回false的问题
核心问题原因
isSelected()方法只对原生的checkbox、radio这类表单元素生效,如果你用的是自定义UI开关(比如用div、span模拟的开关组件),这个方法根本识别不了它的开启状态,自然一直返回false。
具体解决方案
根据开关组件的实现方式,换用以下方式判断状态:
1. 检查组件的aria属性
很多自定义开关会用aria-checked标识状态,比如开启时aria-checked="true":
turnONSwitchButton.getAttribute('aria-checked').then(function (isChecked) { const isOn = isChecked === 'true'; // 注意返回值是字符串,需要转成布尔值 console.log(isOn); if (!isOn) { browser.sleep(3000); turnONSwitchButton.click(); console.log("switch ON"); } else { console.log("switch is already ON"); } });
2. 检查组件的class类名
开启状态的开关通常会有特定class,比如active或switch-on:
turnONSwitchButton.getAttribute('class').then(function (className) { const isOn = className.includes('switch-on'); // 根据实际class名调整 console.log(isOn); if (!isOn) { browser.sleep(3000); turnONSwitchButton.click(); console.log("switch ON"); } else { console.log("switch is already ON"); } });
3. 检查开关的文本显示
如果开关旁有ON/OFF文本,可以定位文本元素判断:
switchStatusText.getText().then(function (text) { const isOn = text.trim() === 'ON'; console.log(isOn); if (!isOn) { browser.sleep(3000); turnONSwitchButton.click(); console.log("switch ON"); } else { console.log("switch is already ON"); } });
原代码的小bug修正
turnONSwitchButton.click().这里多了个点,应该改成turnONSwitchButton.click();- else分支的日志写反了,ON状态应该输出"switch is already ON"而非"switch OFF"
内容的提问来源于stack exchange,提问作者Sonam kumari
相关产品推荐
相关产品推荐

