$ не определена ошибка в тесте Selenium

Я пытаюсь протестировать автозаполнение jQuery в приложении Rails 3.2 с использованием Selenium. Следуя этой записи в блоге, я создал вспомогательный метод fill_autocomplete, который выглядит так:

def fill_autocomplete(field, options = {})
  fill_in field, with: options[:with]

  page.execute_script %Q{ $('##{field}').trigger('focus') }
  page.execute_script %Q{ $('##{field}').trigger('keydown') }
end

Когда я запускаю RSpec, я получаю эту ошибку:

Failure/Error: fill_autocomplete 'crop', with: 'm'
 Selenium::WebDriver::Error::JavascriptError:
   $ is not defined

Строка проблемы page.execute_script %Q{ $('##{field}').trigger('focus') }


spec_helper.rb

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'coveralls'
require 'simplecov'
require 'capybara'

include Warden::Test::Helpers

SimpleCov.configure do
  add_filter 'spec/'
end
Coveralls.wear!('rails')

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  config.use_transactional_fixtures = true

  config.infer_base_class_for_anonymous_controllers = false

  config.order = "random"

  config.include Devise::TestHelpers, :type => :controller
  config.extend ControllerMacros, :type => :controller
end

группа разработчиков/тестировщиков Gemfile

group :development, :test do
  gem 'haml-rails'                     
  gem 'rspec-rails', '~> 2.12.1'       
  gem 'webrat'                         
  gem 'capybara', '~> 2.4.1'            
  gem 'selenium-webdriver', '~> 2.42.0' 
  gem 'factory_girl_rails', '~> 4.0'    
  gem 'coveralls', require: false      
end

Я попытался понизить версию RSpec, Capybara и Selenium-Webdriver. Я пробовал использовать Capybara-Webkit вместо Selenium. Все безрезультатно.

Я работал, исходя из предположения, что автозаполнение jQuery подключается к событию «keydown» и что fill_in Capybara не запускает это событие само по себе. Это правильно?

Любое решение или обходной путь приветствуется. Спасибо!


person niftygrifty    schedule 26.07.2014    source источник
comment
Мне кажется, что у вас нет сопоставления jQuery с $. Итак, чтобы доказать это, проведите тест: запустите автоматический тест до тех пор, пока он не попытается запустить скрипт. Оказавшись там, остановите тест. Теперь откройте инструменты разработчика Chrome/Firefox и запустите тот же скрипт вручную. Теоретически вы должны получить ту же ошибку. Если это так, то это просто потому, что $ не всегда будет отображаться на jQuery (и очень и очень неправильно всегда предполагать это).   -  person Arran    schedule 27.07.2014
comment
Благодаря вашему совету по отладке я смог понять, что это была ошибка в JS, которая произошла до того, как был определен JQuery.   -  person niftygrifty    schedule 27.07.2014


Ответы (1)


Благодаря совету Аррана я понял, что ошибка в другом месте JS произошла до того, как можно было определить JQuery.

person niftygrifty    schedule 27.07.2014