You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Selenium无法在Firefox的<input type="date">字段中输入日期

解决Firefox中Selenium无法操作的问题

我之前也踩过Firefox默认日期选择器的坑——Chrome和Edge都顺风顺水,唯独Firefox这个内置选择器不让检查还没法直接输入,给你几个亲测有效的解决办法:

方法1:用JavaScript直接修改元素的value属性

这是最省心的办法,绕过Firefox的输入限制,直接给input元素设置日期值。步骤如下:

  • 先定位到目标<input type="date">元素(不用管那个内置选择器,元素本身是能找到的,比如用CSS选择器或者XPath定位)
  • 调用Selenium的execute_script方法修改它的value,注意日期格式必须是YYYY-MM-DD

示例代码(Python):

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get("你的目标页面URL")

# 定位日期输入框
date_input = driver.find_element(By.CSS_SELECTOR, "input[type='date']")
# 用JS设置日期值
driver.execute_script("arguments[0].value = '1990-05-15';", date_input)

这个方法不需要改动浏览器设置,几乎所有场景都适用,还能避免模拟点击选择器的麻烦。

方法2:禁用Firefox的内置日期选择器

如果你的测试环境长期需要操作日期输入框,可以直接让Firefox把<input type="date">当成普通文本框处理,步骤是初始化driver时添加偏好设置:

示例代码(Python):

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
# 禁用内置日期选择器,让date类型input变成普通文本框
options.set_preference("dom.inputtypes.date.enabled", False)

driver = webdriver.Firefox(options=options)
driver.get("你的目标页面URL")

# 现在可以直接用send_keys输入日期了
date_input = driver.find_element(By.CSS_SELECTOR, "input[type='date']")
date_input.send_keys("1990-05-15")

设置完之后,Firefox就不会弹出那个没法检查的内置选择器了,操作起来和Chrome/Edge完全一致。

方法3:用ActionChains模拟键盘输入(备选)

如果上面两种方法都不适用,还可以试试先激活输入框,再模拟键盘输入日期。不过这个方法有时候会因为Firefox的输入限制失效,所以作为备选:

示例代码(Python):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("你的目标页面URL")

date_input = driver.find_element(By.CSS_SELECTOR, "input[type='date']")
# 先点击激活输入框
date_input.click()
# 模拟输入日期
ActionChains(driver).send_keys("19900515").perform()
# 或者按格式输入,有些场景需要按回车确认
# ActionChains(driver).send_keys("1990-05-15").send_keys(Keys.ENTER).perform()

这个方法需要注意日期输入的格式,有些情况下可能需要调整输入的字符顺序。

内容的提问来源于stack exchange,提问作者Grishma Singh

火山引擎 最新活动