Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在一个最初被禁用但使用javascript启用的按钮上单击\按钮_Ruby On Rails_Ruby On Rails 3_Cucumber_Capybara - Fatal编程技术网

Ruby on rails 在一个最初被禁用但使用javascript启用的按钮上单击\按钮

Ruby on rails 在一个最初被禁用但使用javascript启用的按钮上单击\按钮,ruby-on-rails,ruby-on-rails-3,cucumber,capybara,Ruby On Rails,Ruby On Rails 3,Cucumber,Capybara,我有一个测试一直失败,因为按钮最初是禁用的,直到我选中一个复选框,然后从按钮中删除禁用属性 %button.btn.btn-success{id: 'registration_button', :type => "submit", :disabled=>'disabled'} Register $('#tos_acceptance').click -> tosChecked = $('#tos_acceptance').is(':checked'); if tosChec

我有一个测试一直失败,因为按钮最初是禁用的,直到我选中一个复选框,然后从按钮中删除禁用属性

%button.btn.btn-success{id: 'registration_button', :type => "submit", :disabled=>'disabled'} Register

$('#tos_acceptance').click ->
  tosChecked = $('#tos_acceptance').is(':checked');
if tosChecked
  $('#registration_button').attr('disabled', false);
else
  $('#registration_button').attr('disabled', 'disabled');
我一直遇到的问题是水豚找不到按钮

 Unable to find button "Register" (Capybara::ElementNotFound)
这是我测试的一部分:

When(/^User goes to the registration page and enters (.*) and (.*) and (.*)$/) do  |email, password, password_confirmation|
  within all('.nav')[1] do
     click_link('Register')
   end
   current_path.should == new_user_registration_path
   page.should have_content('Please create your new account')
   fill_in('user[email]', :with => email)
   fill_in('user[password]', :with => password)
   fill_in('user[password_confirmation]', :with => password_confirmation)
   check 'tos_acceptance'
   click_button('Register')
end
这是我的相关文件:

group :test do
  gem 'rspec-rails'
  gem 'cucumber-rails', :require => false   
  gem 'capybara'
  gem 'database_cleaner'
  gem 'email_spec'
  gem 'spork'
  gem 'launchy'                  
  gem 'autotest'
  gem 'turn', :require => false  
  gem 'minitest', '=4.7.5'               
  gem 'minitest-reporters', '>= 0.14.23'  

如何启用按钮(使用javascript逻辑)以通过此测试?如果我删除disabled属性,我的测试会顺利通过,因此我非常确信问题在于为cucumber测试启用JS。

我假设它实际上没有被禁用——所以我不认为问题是水豚——至少我猜是这样——你必须实际删除disabled属性。这并没有解决测试问题——但根据我的经验,实际上必须从DOM中删除disabled属性才能禁用按钮

$('#tos_acceptance').click ->
  tosChecked = $('#tos_acceptance').is(':checked');
if tosChecked
  $('#registration_button').removeAttr('disabled');
else
  $('#registration_button').attr('disabled', 'disabled');

我不确定,但似乎您没有为Cucumber场景启用javascript

您应该在
场景
之前添加
@javascript
,以便为此场景启用javascript(
selenium
web驱动程序默认使用):


如果您不想使用selenium并想启用headless javascript驱动程序(如capybara webkit或poltergeist),则需要向gem文件中添加一个gem,并按照此处所述更改javascript驱动程序:

您使用的是哪种capybara驱动程序?你用“js:true”标记你的测试了吗?@ivalkeen我不知道你说的水豚驱动程序是什么意思,但我已经包括了我的文件。也许我需要像selenium或webkit这样的东西?请提供完整的规范示例。包括
描述
。在我看来,您没有为您的水豚规范启用javascript,这就是为什么在规范运行期间不执行javascript,因此按钮没有启用。在您的场景之前,您是否有
@javascript
。请你把答案提交给我好让我接受吗。谢谢:)我想不是这样的。当我手动测试以前的代码时,选中复选框时按钮处于启用状态。我尝试将我的JS代码更改为这个代码段,但没有成功。