如何使用Selenium校验下拉字段是否处于禁用状态
Selenium校验Vuetify下拉框禁用状态的XPath写法
现有问题
当前参考普通搜索框禁用定位逻辑编写的下拉框禁用校验方法无法生效,现有实现代码如下:
public By SearchDisabled(string searchId) => By.XPath($"//div[@id='{searchId}']//div[contains(@class, 'v-input--is-disabled')]"); public By InputDisabled(string inputId) => By.XPath($"//div[@id='{inputId}']//div[contains(@class, 'v-input--is-disabled')]");
传入InputDisabled方法的目标下拉框id为ai-confirm-allergy-modal-reason,此前尝试过直接定位内部input标签、匹配disabled属性等写法均未成功定位目标元素,无法完成下拉框禁用状态校验。
问题原因
原有XPath逻辑是查找指定id元素的后代div中携带v-input--is-disabled类的节点,但Vuetify的v-select下拉组件的禁用类v-input--is-disabled是直接打在id对应的根容器div上,不存在于后代节点中,因此原有逻辑匹配不到元素。
另外该组件的禁用状态不通过原生input的disabled属性实现,而是通过根容器样式类+aria-disabled属性控制,因此直接查找带disabled属性的input的写法同样不生效。
修正方案
针对下拉选择组件的专用定位
直接匹配id对应元素自身是否携带禁用样式类即可:
public By InputDisabled(string inputId) => By.XPath($"//div[@id='{inputId}' and contains(@class, 'v-input--is-disabled')]");
兼容多组件类型的通用定位
如果要让方法同时支持普通输入框、搜索组件、下拉选择组件的禁用校验,可以调整XPath同时匹配「元素自身带禁用类」和「元素后代带禁用类」两种场景:
public By CommonControlDisabled(string controlId) => By.XPath( $"//*[@id='{controlId}'][contains(@class, 'v-input--is-disabled')] | //*[@id='{controlId}']//*[contains(@class, 'v-input--is-disabled')]" );
校验注意点
- 不要依赖原生
disabled属性判断Vuetify表单控件的禁用状态,统一通过v-input--is-disabled样式类判断即可 - 定位到元素后可通过获取元素class属性值二次确认类名存在,避免样式类名部分匹配导致的误判
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

