selenium之 时间日期控件的处理

更多关于python selenium的文章,请关注我的专栏:Python Selenium自动化测试详解


很多人问时间日期的空间怎么处理,但是时间日期控件各种各样,你可能遇到正常点的像这样:
正常点的

当然也可能遇到难点的,像这样:
困难的

当然,也不排除会遇到变态的,像这样:
变态的

呵呵,真要一个个想着怎么去选择,简直是非人类干的事!

那么该怎么办?

其实很简单,我们不去搞时间日期空间,我们把它当成一个普通的input框处理就好了!

但是,很多此类型input框都是禁止手动输入的,怎么办?

很简单,用js把禁止输入的readonly属性干掉就好了。

来吧,看一下示例:

示例网址:http://www.sucaijiayuan.com/api/demo.php?url=/demo/20141108-1/

代码:

# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get('http://www.sucaijiayuan.com/api/demo.php?url=/demo/20141108-1/')

driver.switch_to.frame('iframe')

# js = "document.getElementById('txtBeginDate').removeAttribute('readonly')"  # 1.原生js,移除属性
# js = "$('input[id=txtBeginDate]').removeAttr('readonly')"  # 2.jQuery,移除属性
# js = "$('input[id=txtBeginDate]').attr('readonly',false)"  # 3.jQuery,设置为false
js = "$('input[id=txtBeginDate]').attr('readonly','')"  # 4.jQuery,设置为空(同3)

driver.execute_script(js)

driver.find_element_by_id('txtBeginDate').send_keys('2016-08-24')
sleep(2)
print driver.find_element_by_id('txtBeginDate').get_attribute('value')

driver.quit()

结果:

2016-08-24

看,我一下子给了你四种写法。当然你去选也没有问题,就是一堆div、ul、li,但是我想说对于日期时间控件,认真你就输了,绕过去才是真理,就像验证码一样,这个东西去深究,一点意义也没有嘛,所以这里就不推荐也不写这种方法的示例了。

当然,这里还得说一下,有人说他遇到的日期时间框没有id、name,这里提醒一下,这就是普通的input框,定位方法太多了,class、tag name、xpath、css,总有一种适合你。同时友情提醒一下:注意时刻提防iframe!

有什么问题或者遇到什么特殊的控件无法这样处理,可以通过评论告诉我!

  • 16
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
Selenium是一个用于自动化Web应用程序测试的工具,它可以模拟用户在浏览器中的操作。在处理日期件时,Selenium提供了一些方法和技巧来与日期选择器进行交互。 一种常见的日期件是通过文本框输入日期的方式,你可以使用Selenium的sendKeys()方法来模拟键盘输入。例如,你可以使用以下代码来输入日期"2022-01-01": ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get("https://example.com") date_input = driver.find_element_by_id("date-input") date_input.send_keys("2022-01-01") ``` 另一种常见的日期件是通过下拉菜单或弹出窗口选择日期的方式。对于这种情况,你可以使用Selenium的select类来选择日期。以下是一个示例代码: ```python from selenium import webdriver from selenium.webdriver.support.ui import Select driver = webdriver.Chrome() driver.get("https://example.com") date_select = Select(driver.find_element_by_id("date-select")) date_select.select_by_visible_text("2022-01-01") ``` 如果日期件是通过JavaScript弹出窗口实现的,你可以使用Selenium的WebDriverWait类来等待弹出窗口的出现,并使用switch_to.window()方法切换到弹出窗口的上下文。以下是一个示例代码: ```python from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") date_button = driver.find_element_by_id("date-button") date_button.click() # 等待弹出窗口出现 wait = WebDriverWait(driver, 10) wait.until(EC.number_of_windows_to_be(2)) # 切换到弹出窗口的上下文 driver.switch_to.window(driver.window_handles) # 在弹出窗口中选择日期 date_select = driver.find_element_by_id("date-select") date_select.select_by_visible_text("2022-01-01") # 切换回主窗口的上下文 driver.switch_to.window(driver.window_handles) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值