表单自动化测试:month类型输入框仅填充月份、年份无法填充的问题排查
解决
type="month"输入框无法填充年份的问题 看起来你遇到的是原生HTML type="month" 控件的Selenium交互问题——这类控件是浏览器原生实现的,对输入格式和交互逻辑有特定要求,直接按MMYYYY格式输入很可能不会被正确解析,这就是年份无法填入的核心原因。
问题根源拆解
你的代码里输入的是"032019"(月份在前、年份在后),但控件的预期格式是YYYY-MM(对应示例的2019-03)。而且原生控件的交互逻辑在不同浏览器里有差异,直接混合格式输入会让控件无法识别年份部分。另外,代码里用到的变量i,要确认它的值确实是"From_Duration1",否则会定位到错误元素。
具体解决方案
1. 直接用JavaScript设置value属性(最可靠、兼容性最强)
绕过原生控件的交互限制,直接修改元素的value属性,这是最稳妥的方法:
# 定位目标输入框 month_input = self.webdriver.find_element_by_name("From_Duration1") # 通过JS直接赋值为符合要求的YYYY-MM格式 self.webdriver.execute_script("arguments[0].value = '2019-03';", month_input)
这种方法不需要模拟点击或键盘输入,直接修改DOM属性,确保值被正确识别。
2. 修正输入格式与交互顺序(模拟真实用户操作)
如果一定要模拟用户输入,按照控件预期的年份→月份顺序输入,或者分步骤完成:
from selenium.webdriver.common.keys import Keys month_input = self.webdriver.find_element_by_name("From_Duration1") month_input.click() # 激活控件 # 方法1:直接输入YYYYMM格式(多数主流浏览器支持) month_input.send_keys("201903", Keys.ENTER) # 方法2:分步骤输入,用Tab切换年份/月份输入区域 month_input.send_keys("2019") month_input.send_keys(Keys.TAB) month_input.send_keys("03") month_input.send_keys(Keys.ENTER)
注意:不同浏览器对输入格式的支持略有差异,比如Chrome可以直接输入2019-03,而Firefox可能需要分开输入年份和月份。
3. 处理原生下拉控件(仅针对弹出式下拉场景)
如果点击控件后弹出的是浏览器原生的年份/月份下拉框,可以尝试定位下拉选项(但这种方法兼容性较差,不同浏览器的DOM结构差异大):
from selenium.webdriver.support.ui import Select # 激活控件 self.webdriver.find_element_by_name("From_Duration1").click() # 定位年份下拉(示例路径,需根据实际DOM调整) year_select = Select(self.webdriver.find_element_by_xpath("//select[contains(@class, 'year')]")) year_select.select_by_value("2019") # 定位月份下拉 month_select = Select(self.webdriver.find_element_by_xpath("//select[contains(@class, 'month')]")) month_select.select_by_visible_text("March")
这种方法不推荐作为首选,因为浏览器版本更新可能导致DOM结构变化,维护成本高。
内容的提问来源于stack exchange,提问作者mohammed ashique
相关产品推荐
相关产品推荐

