Selenium2+Python2.0自动化测试【16】 日历控件

本文介绍如何使用Selenium WebDriver在Python中操作两种不同类型的日历控件:一种是普通输入框形式的日期选择器;另一种是带有readonly属性的日期输入框。通过示例演示了如何使用send_keys方法直接输入日期,以及如何利用JavaScript移除readonly属性来实现日期的选择。

1.1       日历控件

WEB页面会遇到各种各样的日历控件。但是日期控件都是input标签下弹出来的,可以直接定位到该input,使用sendKeys 方法输入想要设置的值。

1.如果是这种,用法简单定位到input框,直接send_keys


# coding=utf-8
# 日历控件
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(10)
# 此处使用携程网示范
driver.get("http://flights.ctrip.com/")
# 直接定位输入日期
driver.find_element_by_xpath(".//*[@id='DepartDate1TextBox']").send_keys("2017-09-30")
time.sleep(10)
driver.quit()

2. 如果是这种,input有属性readonly


  先使用JS用法将只读属性移除,然后定位到输入框直接send_keys

     PS:如果控件在iframe上,请先切换frame

# coding=utf-8
# 日历控件
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(10)
# 此处使用12306网站示范
driver.get("https://kyfw.12306.cn/otn/leftTicketPrice/init")
# js移除属性
js = "document.getElementById('train_date').removeAttribute('readonly')"
driver.execute_script(js)
# 移除只读属性后定位输入时间值
driver.find_element_by_xpath(".//*[@id='train_date']").clear()
driver.find_element_by_xpath(".//*[@id='train_date']").send_keys("2017-09-30")
time.sleep(10)
driver.quit()
### 如何使用 PythonSelenium 编写针对日历控件的测试用例 为了实现对日历控件的功能测试,可以通过 Selenium 的 `WebDriver` 来模拟用户的交互行为。以下是具体的方法以及示例代码。 #### 使用 Selenium 定位日历控件Selenium 中,可以利用多种定位策略来查找网页上的日历控件。常见的定位方式包括 ID、Class Name、XPath 或 CSS Selector 等[^1]。如果目标日期输入框具有唯一的属性(如 id="date-picker"),可以直接通过该属性进行定位: ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") # 找到日历控件并点击打开它 calendar_input = driver.find_element(By.ID, "date-picker") calendar_input.click() ``` #### 设置特定日期的选择逻辑 当弹出的日历界面显示后,通常需要进一步操作以选择具体的日期。假设日历是以表格形式展示月份和天数,则可通过 XPath 查找指定日期单元格,并触发点击事件完成选中动作[^4]。 ```python import time def select_date(driver, year, month, day): """辅助函数用于精确选取给定年月日""" while True: current_year_month = driver.find_element(By.CLASS_NAME, 'current-year-month').text if f"{year} {month}" in current_year_month: # 判断当前视图是否为目标时间范围 break next_button = driver.find_element(By.XPATH, "//button[@aria-label='Next']") next_button.click() # 转移到下一个月直到匹配为止 target_day_cell = driver.find_element(By.XPATH, f"//td[text()='{day}']") target_day_cell.click() select_date(driver, 2023, "December", 25) time.sleep(2) # 等待确认效果 ``` 上述代码片段展示了如何动态调整至期望的时间段并通过 Xpath 准确获取对应的日子节点[^2]。 #### 断言验证所选项正确无误 最后一步是对最终结果加以校验确保预期的行为已被成功实施。这可能涉及到读取已填写字段的内容并与预设值对比一致性的过程。 ```python selected_value = calendar_input.get_attribute('value') assert selected_value == "Dec 25, 2023" print(f"Test Passed! Selected Value is '{selected_value}'") ``` 以上即为完整的基于 Python 及其扩展库 Selenium 针对 Web 应用程序中的日历组件开展自动化功能检测的一个实例说明[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值