【问题标题】:How to send dates to read-only calendar input boxes using Selenium webdriver?如何使用 Selenium webdriver 将日期发送到只读日历输入框?
【发布时间】:2020-01-11 16:18:19
【问题描述】:

我想指定开始日期和结束日期。

我无法更改默认日期,因为输入框是只读的。或者,我必须通过单击日历来选择日期。不知道该怎么做。有没有办法将键发送到只读输入框?

两个输入框的来源如下:

       <div class="date-from">
                <h3>From</h3>
                <input type="text" readonly="readonly" value="Jan 11, 2020">
                <button class="icon la-Calendar"></button>
            </div>

      <div class="date-to">
                        <h3>To</h3>
                        <input type="text" readonly="readonly" value="Jan 11, 2020">
                        <button class="icon la-Calendar"></button>
                    </div>

我的以下代码收到“消息:无效元素状态”错误。谢谢!

      browser.find_element_by_xpath('//*[@id="bpcg9kk"]/div/div[3]/div[1]/div[2]/div[1]/div[2]/div[1]/input').clear()
      browser.find_element_by_xpath('//*[@id="bpcg9kk"]/div/div[3]/div[1]/div[2]/div[1]/div[2]/div[1]/input').send_keys("Jan 01,2019")

[更新] 快到了。使用以下代码。请求日期已成功更改。结束日期有问题。请求日期也出现在结束日期框中。

element = browser.find_element_by_xpath('//*[@id="bpcg9kk"]/div/div[3]/div[1]/div[2]/div[1]/div[2]/div[1]/input')
browser.execute_script("arguments[0].removeAttribute('readonly','readonly')",element)
element.clear()
element.send_keys("Jan 01, 2019")
time.sleep(5)

element2 = browser.find_element_by_xpath('//*[@id="bpcg9kk"]/div/div[3]/div[1]/div[2]/div[1]/div[2]/div[2]/input')
browser.execute_script("arguments[0].removeAttribute('readonly','readonly')",element2)
element2.clear()
element2.send_keys("Dec 31, 2019")

【问题讨论】:

  • 清除字段出现问题。如果您无法使用 clear() 清除。你可以试试 Action 类

标签: python selenium selenium-webdriver


【解决方案1】:

您可以使用下面的行代替send_keys 在日期输入字段中写入日期。基本上我们直接改变元素的值。

element= browser.find_element_by_xpath('//*[@id="bpcg9kk"]/div/div[3]/div[1]/div[2]/div[1]/div[2]/div[1]/input')

    browser.execute_script("arguments[0].setAttribute('value', ‘“Jan 01,2019"')", element);

    OR



    browser.execute_script(“arguments[0].value=arguments[1]", element, “Jan 01,2019”)

另一种解决方案:

通过删除readonly 属性使输入字段可编辑,然后发送如下键

element= browser.find_element_by_xpath('//*[@id="bpcg9kk"]/div/div[3]/div[1]/div[2]/div[1]/div[2]/div[1]/input')


browser.execute_script("arguments[0].removeAttribute('readonly','readonly')",element)

element.send_keys("Jan 01,2019")

清除字段:

element2.send_keys(Keys.CONTROL + "a");
 element2.send_keys(Keys.DELETE);

【讨论】:

  • 是的,我可以使用您的代码更改网页上的日期。但是,新日期似乎没有发送到服务器,因为返回的搜索结果仍然基于默认日期。还有什么我需要做的吗?谢谢。
  • 你知道怎么做吗?
  • 我已经更新了我的答案。查看其他解决方案下的代码
  • 快到了。结束日期的第二个输入框没有更改成功。请参阅我的问题中的更新。非常感谢!
  • 抱歉,那是什么?
猜你喜欢
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2019-07-11
  • 2019-09-23
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
相关资源
最近更新 更多