Selenium自动化之操作日期控件(一)send_keys

本文介绍了如何在Selenium自动化测试中利用send_keys方法来操控网页上的日期输入控件,以实现自动填写日期的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#操作日期控件send_keys

from selenium import webdriver
import unittest, time, traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException

class TestDemo(unittest.TestCase):

    def setUp(self):
        # 启动ie浏览器
        self.driver = webdriver.Ie(executable_path = "g:\\IEDriverServer")

    def test_datePicker(self):
        url = "http://jqueryui.com/resources/demos/datepicker/other-months.html"
        # 访问指定的网址
        self.driver.get(url)
        try:
            # 创建一个显示等待对象
            wait = WebDriverWait(self.driver, 10, 0.2)
            # 显示等待判断被测试页面上的日期输入框是否可见并且能被点击
            wait.until(EC.element_to_be_clickable((By.ID, 'datepicker')))
        except TimeoutException as e:
            # 捕获TimeoutException异常
            print (traceback.print_exc())
  
<think>好的,用户想用Selenium自动化测试时,设置日期控件为当前系统时间加个月。我需要分步骤思考如何解决这个问题。 首先,要确定日期控件的类型。常见的可能是HTML5的date input,或者是基于JavaScript的自定义控件。如果是HTML5的<input type="date">,直接通过Seleniumsend_keys方法设置值应该可行。这时候需要生成正确的日期字符串,格式是YYYY-MM-DD。 如果遇到的是自定义日期控件,可能需要先点击触发日期选择器,然后操作弹出的日历组件,选择目标日期。这时候需要定位到日期选择器的元素,比如下个月的箭头按钮,再找到对应日期的元素点击。 接下来,处理日期计算的问题。当前时间加个月,需要考虑月份边界,比如1月加个月到2月,但如果是1月31日,加个月可能变成2月28日或29日(闰年)。不过用户可能只需要简单地将月份加1,不处理日期溢出,或者根据需求调整。这里需要生成正确的日期,Python的datetime模块可以处理,使用relativedelta可以更灵活地加减月份,避免手动计算。 然后,考虑如何将生成的日期格式化成需要的字符串。对于HTML5的input,格式化YYYY-MM-DD即可。对于自定义控件,可能需要分解成年、月、日部分,或者根据控件显示的格式来调整。 还要注意,有些日期控件可能有只读属性,需要先执行JavaScript脚本移除该属性,再输入值。比如用execute_script方法修改元素的readonly属性。 最后,可能的异常处理,比如日期控件加载延迟,需要添加显式等待,确保元素可交互后再操作。 总结步骤应该是:1. 识别控件类型;2. 计算目标日期;3. 根据控件类型选择输入方式;4. 处理可能的只读属性;5. 执行操作并验证结果。</think>要使用Selenium日期控件设置为当前系统时间加个月,请按照以下步骤操作: ### 方法1:直接输入日期(适用于HTML5日期控件) 1. **计算目标日期** 使用`datetime`和`dateutil`库处理日期运算: ```python from datetime import datetime from dateutil.relativedelta import relativedelta target_date = datetime.now() + relativedelta(months=1) formatted_date = target_date.strftime("%Y-%m-%d") # 格式化为YYYY-MM-DD ``` 2. **定位并输入日期** 适用于`<input type="date">`元素: ```python date_input = driver.find_element(By.CSS_SELECTOR, "input[type='date']") date_input.clear() date_input.send_keys(formatted_date) ``` ### 方法2:操作日期选择器(适用于自定义控件) 1. **触发日期弹窗** ```python driver.find_element(By.CSS_SELECTOR, ".date-picker-trigger").click() ``` 2. **操作月份切换按钮** ```python # 点击"下个月"按钮 next_month_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, ".next-month")) ) next_month_btn.click() ``` 3. **选择目标日期** ```python day_element = driver.find_element(By.XPATH, f"//td[@data-day='{target_date.day}']") day_element.click() ``` ### 特殊处理:解除只读属性 若控件有`readonly`属性,需先移除: ```python driver.execute_script("arguments[0].removeAttribute('readonly')", date_input) date_input.send_keys(formatted_date) ``` ### 验证结果 建议添加断言验证: ```python assert date_input.get_attribute("value") == formatted_date ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值