【问题标题】:Selenium send_keys doesn't work if input type="number"如果输入类型 =“数字”,Selenium send_keys 不起作用
【发布时间】:2014-06-18 05:44:19
【问题描述】:

我正在使用 selenium 编写测试。在这些测试中,我需要在表单的字段中输入一个数字。

这里是html:

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<form>
    <input type="number" id="field_id">
</form>


</body>
</html>

还有代码:

browser = webdriver.Firefox()
browser.get('file:///home/my_username/test.html')
field = browser.find_element_by_id('field_id')
field.send_keys('12')  # NOTHING HAPPEN!

顺便说一句,例如,如果我将字段的类型更改为“文本”,则根本没有问题。此外,field.send_keys(Keys.UP) 工作得很好(但在我使用引导程序时不起作用)和field.clear() 一直工作,以及field.click()

硒版本:2.41.0 火狐版本:29.0

【问题讨论】:

  • 如果你在一个循环中调用send_keys 怎么办:for x in '12': field.send_keys(x)
  • 如果您先单击该字段会发生什么?另外,您可以在字段中手动输入值吗?
  • @RobbieWareham 手动单击该字段没有帮助。 field.click() 确实关注输入字段。 field.send_keys 也专注于该领域,仅此而已。

标签: python firefox selenium selenium-webdriver


【解决方案1】:

因为您使用的是 Firefox 29。请降级到 Firefox 28,这是 Selenium 2.41.0 支持的版本,请参阅CHANGES 文件。否则你需要等待新的 Selenium 更新。

这是我使用 Firefox 28 测试过的内容:

from selenium import webdriver

DEMO_PAGE = '''
    data:text/html,
    <form><input type="number" id="field_id"></form>
'''

browser = webdriver.Firefox()
browser.get(DEMO_PAGE)

input_number = browser.find_element_by_id('field_id')
input_number.send_keys('12')

input_number_value = input_number.get_attribute('value')
print "input_number_value = " + input_number_value

另见:Selenium can't find fields with type number

【讨论】:

  • 像魅力一样工作。谢谢!
  • 安装了多个版本的 firefox,我如何告诉 selenium 使用特定版本?
  • 有这方面的 Selenium 错误报告吗?能给个链接吗?
  • 此外,即使使用 Firefox 31(在配置了 Linux 的 Sauce Labs 上测试),它似乎仍然无法正常工作。
  • 我在 Selenium 跟踪器中为此创建了一个问题:code.google.com/p/selenium/issues/detail?id=7809
【解决方案2】:

我使用的是 Fedora(它不提供 Firefox 等旧版本的软件包),所以“降级 Firefox”有点不靠谱。

幸运的是,an answer to a very similar question 暗示了一个更好的解决方案——设置“dom.forms.number”Firefox 首选项以禁用对input type="number" 的特殊处理。在 Python 中:

profile = webdriver.FirefoxProfile()                                    
profile.set_preference("dom.forms.number", False)                       
browsers = webdriver.Firefox(profile)

使用 Firefox 29 和 Selenium 2.41.0

【讨论】:

    【解决方案3】:

    我今天早上遇到了这个问题。升级 Selenium 后,它现在可以正常工作了。

    如果你正在阅读这篇文章,请运行

    pip install -U selenium
    

    然后再试一次。我从 Selenium 版本 2.41.0 升级到 2.42.1,现在它可以在 Firefox 30.0 上正常运行。

    【讨论】:

      【解决方案4】:

      您或许可以使用 Javascript 来解决这个问题。以下代码是用 Java 编写的,但在 Python 中也可以类似地完成:

      ((IJavaScriptExecutor)webdriver)
           .ExecuteScript("document.getElementById('field_id').value='12';");
      

      我遇到了同样的问题,使用 Javascript 解决了它。

      【讨论】:

        【解决方案5】:

        在我的情况下,selenium Send_keys 以这种方式工作正常。

        from selenium import webdriver
        from selenium.webdriver.common.keys import Keys
        
        browser = webdriver.Firefox()
        
        browser.get('http://www.yahoo.com')
        assert 'Yahoo' in browser.title
        
        elem = browser.find_element_by_name('p')  # Find the search box
        elem.send_keys('seleniumhq' + Keys.RETURN)
        
        browser.quit()enter code here`
        

        这是网络https://pypi.python.org/pypi/selenium

        【讨论】:

          【解决方案6】:

          我通过这种方式解决了这个问题:

          locator =  <element xpath>
          field = browser.find_element_by_xpath(to_unicode(**locator**,"utf-8")) 
          if(field != None):
               field.send_keys(Keys.CONTROL + 'a')
               field.send_keys(value)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-03
            • 2016-04-12
            • 2021-02-01
            • 2022-12-18
            • 2022-06-30
            • 2017-09-21
            相关资源
            最近更新 更多