Капибара не ждет завершения запроса ajax - PullRequest
5 голосов
/ 02 ноября 2011

Я пытаюсь проверить выбор опции из тега выбора (эти опции выбираются с удаленного сервера базы данных).При обычном взаимодействии с веб-сайтом заполнение этого раскрывающегося списка занимает не более доли секунды.Однако, когда я запускаю следующий тест,



    When /^(?:|I )select "([^"]*)" from "([^"]*)" in search form$/ do |value, field|
      within "#select_container" do
        save_and_open_page
        page.should have_css("#criteria_div_code > option:nth-child(10)")
        select(value, :from => field)
      end 
    end


я получаю следующую ошибку:

expected css "#criteria_div_code > option:nth-child(10)" to return something (RSpec::Expectations::ExpectationNotMetError)

В раскрывающемся списке указывается не менее 20 параметров и т. Д.Я просто проверяю наличие 10-й опции (на данный момент).

save_and_open_page показывает, что существует только одна опция (опция по умолчанию) вместо как минимум 10, и, следовательно, возникает «ExpectionNotMetError».

Capybara.default_wait_time = 30 - Достаточно времени для заполнения списков.

Не ждет ли капибара завершения вызова ajax?

Я что-то здесь упускаю?

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Возможно, вы захотите проверить мой ответ на установку тайм-аутов для ресинхронизации ajax Использование Capybara для интеграционных тестов AJAX .По умолчанию время ожидания повторной синхронизации составляет 10 секунд, и если ваш ответ не возвращается до этого времени, вы не получите никаких ответов, особенно если вы установили: resynchronize в false в ваших конфигурациях.ниже приведен фрагмент для установки этого тайм-аута

 Capybara.register_driver :selenium do |app|
   Capybara::Selenium::Driver.new(app, :browser => :firefox, :resynchronization_timeout => 1000)
 end

ПРИМЕЧАНИЕ: если вы ранее установили: resynchronize в false, вам нужно установить в true.

0 голосов
/ 02 ноября 2011

Полагаю, вам нужен пользовательский драйвер js для тестирования ajax,

describe 'some stuff which requires js', :js => true do
  it 'will use the default js driver'
  it 'will switch to one specific driver', :driver => :celerity
end

Также обратите внимание на следующую строку - Capybara может блокировать и ждать завершения запросов Ajax после того, как вы взаимодействуете со страницей.Чтобы включить это, установите для параметра: resynchronize driver значение true.

...