【问题标题】:Filling date field with Selenium WebDriver使用 Selenium WebDriver 填充日期字段
【发布时间】:2021-08-29 07:07:01
【问题描述】:

当我开始熟悉这个库时,我正在尝试使用 Selenium 填写注册表以进行练习。

是本网站的报名表:https://www.fast2sms.com/

我目前正在尝试什么

我从这个开始:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.fast2sms.com/")

在那里,我使用 css 选择器单击将 data-target 属性设置为 "#signupM" 的注册按钮:

driver.find_element_by_css_selector('button[data-target="#signupM"]').click()

然后我为这些字段设置了一些虚拟值:

from phone_gen import PhoneNumber

name = "John Doe"
dob = "02-01-1990"
phone_number = PhoneNumber("India").get_number().replace("+91", "")
email_address = f"{phone_number}@mailinator.com"

我等待名称字段,然后填写:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

name_field = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[name="signup_name"]')))
name_field.send_keys(name)

然后是电话号码和电子邮件地址:

phone_number_field = driver.find_element_by_css_selector('input[name="signup_mobile"]')
phone_number_field.send_keys(phone_number)

email_addr_field = driver.find_element_by_css_selector('input[name="signup_email"]')
email_addr_field.send_keys(email_address)

到目前为止,一切正常,完全符合预期,但是当我尝试填写“出生日期”字段时,我遇到了问题:

dob_field = driver.find_element_by_css_selector('input[name="signup_dob"]')
dob_field.send_keys(dob)

我面临的问题

  1. 出生日期字段未填写。
  2. 它会抛出一个错误,selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  3. 我无法提交未填写出生日期的表格。

我尝试调试的方式

  1. 重新检查 CSS 选择器
  2. 等待出生数据字段可使用 WebDriverWait 进行交互
  3. 我没有填写文本,而是尝试与单击该字段时出现的弹出窗口进行交互(我想我必须这样做,但不知道如何。)

看似重复但并非重复的问题:

Select Particular Date using Python Selenium (Rollover dates)

Using Selenium on calendar date picker

Interacting with pop-up boxes using selenium in python

【问题讨论】:

    标签: python selenium selenium-webdriver web-testing selenium-webdriver-python


    【解决方案1】:

    我明白为什么它可能不起作用。该网站正在使用一个名为datedropper 的特定javascript 库。因此,日期的输入元素是只读格式。

    我认为您可以通过以下方式解决它:

    js_code = "document.querySelector('input[name=signup_dob]').value =" 
    driver.execute_script(js_code + your_date)
    

    不太确定 js 代码能否正常工作。它可能需要一些编辑。

    【讨论】:

    • 你似乎是对的。但是我到底需要用 driver.execute_script 执行什么来设置日期?我不太了解 JavaScript... :(
    • 没用,得到了这个异常 selenium.common.exceptions.JavascriptException: Message: javascript error: window.querySelector is not a function
    • 是的,对不起。我现在正在测试它。它应该是文件,我的错:)
    • 当我通过这个dob = "02-01-1990" 时它仍然对我不起作用,它在输入字段中填充-1989。当然没有错误,因为它填充了一些东西,但它填充了 -1989 知道为什么吗?
    • 很遗憾,通过在网站上的控制台中传递您的日期,我无法复制您的问题:document.querySelector('input[name=signup_dob]').value = '02-01-1990' 正确显示 "02-01-1990" 您能分享相关的代码吗?
    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 2022-01-11
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2011-08-03
    相关资源
    最近更新 更多