You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单自动化测试: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:38:11