Selenium找不到类型编号的字段

时间:2014-04-28 22:07:07

标签: ruby selenium cucumber capybara

我在让Cucumber找到包含HTML5 type="number"的字段时遇到问题。我不是他们在浏览器中看到的方式的忠实粉丝,但我有一些领域需要移动设备上的数字键盘,这似乎是获得它的最简单方法。我正在使用SimpleForm来构建表单,当我设置:as => :text时,一切正常,但如果我设置:as => :number,则字段不会被填写。我没有得到任何错误,该领域没有得到填补。

具体来说,当我有这样的步骤时:

And I fill in "application_form_age" with "52"

然后这个标签将不会填写:

<input class=​"numeric integer required" id=​"application_form_age" min=​"0" name=​"application_form[age]​" size=​"50" step=​"1" type=​"number">​

但是这个有效:

<input class=​"string required" id=​"application_form_age" name=​"application_form[age]​" size=​"50" type=​"text">​

此外,它只发生在@javascript场景中。在没有必要使用@javascript并且方案没有启动浏览器的情况下,这也可以正常工作。

事物的版本:

capybara (2.2.1)
cucumber (1.3.14)
selenium-webdriver (2.41.0)
simple_form (2.1.1)
webrat (0.7.3)

Firefox 29.0

我很难过。我尝试了一堆我的应用程序JS和CSS,看看我正在做的事情是否打破它,但没有运气。我只是通过强制那些字段在我的测试环境中没有HTML5类型号来修补它,但我不想那样生活。还有其他人看到这个吗?我一直无法找到它的任何引用,这使它看起来像我正在做的事情。但我无法弄明白。

2 个答案:

答案 0 :(得分:2)

好的,我发现firefox有一个禁用数字输入字段支持的选项:'dom.forms.number'。

因此,如果在env.rb中添加以下行,则会禁用数字输入并再次测试。

Capybara.register_driver :selenium do |app|
  profile = Selenium::WebDriver::Firefox::Profile.new
  profile["dom.forms.number"] = false
  Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
end

答案 1 :(得分:1)

首先,我认为你对这些框架有些困惑。 Cucumber是一个BDD框架,它不会以任何方式自动化浏览器,所以这个问题与它无关(这就是我从你的问题标题中删除它的原因)。

看起来你正在使用Capybara,这是一个ATDD框架。您可能会考虑向我们展示您用于诊断问题的Capybara代码。

在幕后,我假设您使用Selenium WebDriver,我可以确认Selenium与<input type="number">一起使用(使用Firefox 28测试,这是一个selenium-webdriver(2.41.0)支持)。 / p>

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox

DEMO_PAGE = <<-eos
  data:text/html,
  <input class=​"numeric integer required" id=​"application_form_age" min=​"0" name=​"application_form[age]​" size=​"50" step=​"1" type=​"number">
eos

driver.get(DEMO_PAGE)
driver.find_element(:tag_name, 'input').send_keys('25')

因此,您可能希望使用Capybara创建一个类似的演示来测试此功能。

如果演示有效,那么我们需要仔细查看您的应用程序。 不过,请为Capybara开发商订票。